immich/mobile-v2/lib/domain/models/render_list_element.model.dart
2025-02-26 08:58:19 +05:30

85 lines
2.0 KiB
Dart

import 'package:intl/intl.dart';
enum RenderListGroupBy { month, day }
sealed class RenderListElement {
const RenderListElement({required this.date});
final DateTime date;
@override
bool operator ==(covariant RenderListElement other) {
if (identical(this, other)) return true;
return date == other.date;
}
@override
int get hashCode => date.hashCode;
}
class RenderListMonthHeaderElement extends RenderListElement {
late final String header;
RenderListMonthHeaderElement({required super.date}) {
final formatter = DateTime.now().year == date.year
? DateFormat.MMMM()
: DateFormat.yMMMM();
header = formatter.format(date);
}
@override
bool operator ==(covariant RenderListMonthHeaderElement other) {
if (identical(this, other)) return true;
return super == other && header == other.header;
}
@override
int get hashCode => super.hashCode ^ date.hashCode;
}
class RenderListDayHeaderElement extends RenderListElement {
final String header;
const RenderListDayHeaderElement({required super.date, required this.header});
@override
bool operator ==(covariant RenderListDayHeaderElement other) {
if (identical(this, other)) return true;
return super == other && header == other.header;
}
@override
int get hashCode => super.hashCode ^ date.hashCode;
}
class RenderListAssetElement extends RenderListElement {
final int assetCount;
final int assetOffset;
const RenderListAssetElement({
required super.date,
required this.assetCount,
required this.assetOffset,
});
@override
String toString() =>
'RenderListAssetElement(date: $date, assetCount: $assetCount, assetOffset: $assetOffset)';
@override
bool operator ==(covariant RenderListAssetElement other) {
if (identical(this, other)) return true;
return super == other &&
other.assetCount == assetCount &&
other.assetOffset == assetOffset;
}
@override
int get hashCode =>
super.hashCode ^ assetCount.hashCode ^ assetOffset.hashCode;
}