67 lines
1.6 KiB
Dart
67 lines
1.6 KiB
Dart
import "package:supabase_flutter/supabase_flutter.dart";
|
|
|
|
enum ChannelKind { text, operations, voice, announcement, unknown }
|
|
|
|
abstract class BaseChannel {
|
|
BaseChannel({
|
|
required this.client,
|
|
required this.id,
|
|
required this.organizationId,
|
|
required this.name,
|
|
required this.description,
|
|
required this.slug,
|
|
required this.kind,
|
|
required this.isPrivate,
|
|
required this.position,
|
|
});
|
|
|
|
final SupabaseClient client;
|
|
final String id;
|
|
final String organizationId;
|
|
final String name;
|
|
final String description;
|
|
final String slug;
|
|
final ChannelKind kind;
|
|
final bool isPrivate;
|
|
final int position;
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
"id": id,
|
|
"organization_id": organizationId,
|
|
"name": name,
|
|
"description": description,
|
|
"slug": slug,
|
|
"type": kind.name,
|
|
"is_private": isPrivate,
|
|
"position": position,
|
|
};
|
|
}
|
|
|
|
static ChannelKind channelKindFromApi(Object? rawType) {
|
|
final value = (rawType ?? "").toString().trim().toLowerCase();
|
|
switch (value) {
|
|
case "text":
|
|
return ChannelKind.text;
|
|
case "operations":
|
|
return ChannelKind.operations;
|
|
case "voice":
|
|
return ChannelKind.voice;
|
|
case "announcement":
|
|
return ChannelKind.announcement;
|
|
default:
|
|
return ChannelKind.unknown;
|
|
}
|
|
}
|
|
|
|
static Map<String, dynamic> asMap(Object? value) {
|
|
if (value is Map<String, dynamic>) return value;
|
|
if (value is Map) return value.cast<String, dynamic>();
|
|
return <String, dynamic>{};
|
|
}
|
|
|
|
static List<dynamic> asList(Object? value) {
|
|
if (value is List) return value;
|
|
return const <dynamic>[];
|
|
}
|
|
}
|