Skip to content

Commit 1ee2476

Browse files
committed
Add notes
1 parent 59b54d5 commit 1ee2476

File tree

18 files changed

+752
-17
lines changed

18 files changed

+752
-17
lines changed

api/lib/src/event/event.mapper.dart

Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1797,6 +1797,8 @@ class HybridWorldEventMapper extends SubClassMapperBase<HybridWorldEvent> {
17971797
CellItemsClearedMapper.ensureInitialized();
17981798
TableRenamedMapper.ensureInitialized();
17991799
TableRemovedMapper.ensureInitialized();
1800+
NoteChangedMapper.ensureInitialized();
1801+
NoteRemovedMapper.ensureInitialized();
18001802
}
18011803
return _instance!;
18021804
}
@@ -3260,6 +3262,234 @@ class _TableRemovedCopyWithImpl<$R, $Out>
32603262
_TableRemovedCopyWithImpl($value, $cast, t);
32613263
}
32623264

3265+
class NoteChangedMapper extends SubClassMapperBase<NoteChanged> {
3266+
NoteChangedMapper._();
3267+
3268+
static NoteChangedMapper? _instance;
3269+
static NoteChangedMapper ensureInitialized() {
3270+
if (_instance == null) {
3271+
MapperContainer.globals.use(_instance = NoteChangedMapper._());
3272+
HybridWorldEventMapper.ensureInitialized().addSubMapper(_instance!);
3273+
}
3274+
return _instance!;
3275+
}
3276+
3277+
@override
3278+
final String id = 'NoteChanged';
3279+
3280+
static String _$name(NoteChanged v) => v.name;
3281+
static const Field<NoteChanged, String> _f$name = Field('name', _$name);
3282+
static String _$content(NoteChanged v) => v.content;
3283+
static const Field<NoteChanged, String> _f$content =
3284+
Field('content', _$content);
3285+
3286+
@override
3287+
final MappableFields<NoteChanged> fields = const {
3288+
#name: _f$name,
3289+
#content: _f$content,
3290+
};
3291+
3292+
@override
3293+
final String discriminatorKey = 'type';
3294+
@override
3295+
final dynamic discriminatorValue = 'NoteChanged';
3296+
@override
3297+
late final ClassMapperBase superMapper =
3298+
HybridWorldEventMapper.ensureInitialized();
3299+
3300+
static NoteChanged _instantiate(DecodingData data) {
3301+
return NoteChanged(data.dec(_f$name), data.dec(_f$content));
3302+
}
3303+
3304+
@override
3305+
final Function instantiate = _instantiate;
3306+
3307+
static NoteChanged fromMap(Map<String, dynamic> map) {
3308+
return ensureInitialized().decodeMap<NoteChanged>(map);
3309+
}
3310+
3311+
static NoteChanged fromJson(String json) {
3312+
return ensureInitialized().decodeJson<NoteChanged>(json);
3313+
}
3314+
}
3315+
3316+
mixin NoteChangedMappable {
3317+
String toJson() {
3318+
return NoteChangedMapper.ensureInitialized()
3319+
.encodeJson<NoteChanged>(this as NoteChanged);
3320+
}
3321+
3322+
Map<String, dynamic> toMap() {
3323+
return NoteChangedMapper.ensureInitialized()
3324+
.encodeMap<NoteChanged>(this as NoteChanged);
3325+
}
3326+
3327+
NoteChangedCopyWith<NoteChanged, NoteChanged, NoteChanged> get copyWith =>
3328+
_NoteChangedCopyWithImpl(this as NoteChanged, $identity, $identity);
3329+
@override
3330+
String toString() {
3331+
return NoteChangedMapper.ensureInitialized()
3332+
.stringifyValue(this as NoteChanged);
3333+
}
3334+
3335+
@override
3336+
bool operator ==(Object other) {
3337+
return NoteChangedMapper.ensureInitialized()
3338+
.equalsValue(this as NoteChanged, other);
3339+
}
3340+
3341+
@override
3342+
int get hashCode {
3343+
return NoteChangedMapper.ensureInitialized().hashValue(this as NoteChanged);
3344+
}
3345+
}
3346+
3347+
extension NoteChangedValueCopy<$R, $Out>
3348+
on ObjectCopyWith<$R, NoteChanged, $Out> {
3349+
NoteChangedCopyWith<$R, NoteChanged, $Out> get $asNoteChanged =>
3350+
$base.as((v, t, t2) => _NoteChangedCopyWithImpl(v, t, t2));
3351+
}
3352+
3353+
abstract class NoteChangedCopyWith<$R, $In extends NoteChanged, $Out>
3354+
implements HybridWorldEventCopyWith<$R, $In, $Out> {
3355+
@override
3356+
$R call({String? name, String? content});
3357+
NoteChangedCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t);
3358+
}
3359+
3360+
class _NoteChangedCopyWithImpl<$R, $Out>
3361+
extends ClassCopyWithBase<$R, NoteChanged, $Out>
3362+
implements NoteChangedCopyWith<$R, NoteChanged, $Out> {
3363+
_NoteChangedCopyWithImpl(super.value, super.then, super.then2);
3364+
3365+
@override
3366+
late final ClassMapperBase<NoteChanged> $mapper =
3367+
NoteChangedMapper.ensureInitialized();
3368+
@override
3369+
$R call({String? name, String? content}) => $apply(FieldCopyWithData(
3370+
{if (name != null) #name: name, if (content != null) #content: content}));
3371+
@override
3372+
NoteChanged $make(CopyWithData data) => NoteChanged(
3373+
data.get(#name, or: $value.name), data.get(#content, or: $value.content));
3374+
3375+
@override
3376+
NoteChangedCopyWith<$R2, NoteChanged, $Out2> $chain<$R2, $Out2>(
3377+
Then<$Out2, $R2> t) =>
3378+
_NoteChangedCopyWithImpl($value, $cast, t);
3379+
}
3380+
3381+
class NoteRemovedMapper extends SubClassMapperBase<NoteRemoved> {
3382+
NoteRemovedMapper._();
3383+
3384+
static NoteRemovedMapper? _instance;
3385+
static NoteRemovedMapper ensureInitialized() {
3386+
if (_instance == null) {
3387+
MapperContainer.globals.use(_instance = NoteRemovedMapper._());
3388+
HybridWorldEventMapper.ensureInitialized().addSubMapper(_instance!);
3389+
}
3390+
return _instance!;
3391+
}
3392+
3393+
@override
3394+
final String id = 'NoteRemoved';
3395+
3396+
static String _$name(NoteRemoved v) => v.name;
3397+
static const Field<NoteRemoved, String> _f$name = Field('name', _$name);
3398+
3399+
@override
3400+
final MappableFields<NoteRemoved> fields = const {
3401+
#name: _f$name,
3402+
};
3403+
3404+
@override
3405+
final String discriminatorKey = 'type';
3406+
@override
3407+
final dynamic discriminatorValue = 'NoteRemoved';
3408+
@override
3409+
late final ClassMapperBase superMapper =
3410+
HybridWorldEventMapper.ensureInitialized();
3411+
3412+
static NoteRemoved _instantiate(DecodingData data) {
3413+
return NoteRemoved(data.dec(_f$name));
3414+
}
3415+
3416+
@override
3417+
final Function instantiate = _instantiate;
3418+
3419+
static NoteRemoved fromMap(Map<String, dynamic> map) {
3420+
return ensureInitialized().decodeMap<NoteRemoved>(map);
3421+
}
3422+
3423+
static NoteRemoved fromJson(String json) {
3424+
return ensureInitialized().decodeJson<NoteRemoved>(json);
3425+
}
3426+
}
3427+
3428+
mixin NoteRemovedMappable {
3429+
String toJson() {
3430+
return NoteRemovedMapper.ensureInitialized()
3431+
.encodeJson<NoteRemoved>(this as NoteRemoved);
3432+
}
3433+
3434+
Map<String, dynamic> toMap() {
3435+
return NoteRemovedMapper.ensureInitialized()
3436+
.encodeMap<NoteRemoved>(this as NoteRemoved);
3437+
}
3438+
3439+
NoteRemovedCopyWith<NoteRemoved, NoteRemoved, NoteRemoved> get copyWith =>
3440+
_NoteRemovedCopyWithImpl(this as NoteRemoved, $identity, $identity);
3441+
@override
3442+
String toString() {
3443+
return NoteRemovedMapper.ensureInitialized()
3444+
.stringifyValue(this as NoteRemoved);
3445+
}
3446+
3447+
@override
3448+
bool operator ==(Object other) {
3449+
return NoteRemovedMapper.ensureInitialized()
3450+
.equalsValue(this as NoteRemoved, other);
3451+
}
3452+
3453+
@override
3454+
int get hashCode {
3455+
return NoteRemovedMapper.ensureInitialized().hashValue(this as NoteRemoved);
3456+
}
3457+
}
3458+
3459+
extension NoteRemovedValueCopy<$R, $Out>
3460+
on ObjectCopyWith<$R, NoteRemoved, $Out> {
3461+
NoteRemovedCopyWith<$R, NoteRemoved, $Out> get $asNoteRemoved =>
3462+
$base.as((v, t, t2) => _NoteRemovedCopyWithImpl(v, t, t2));
3463+
}
3464+
3465+
abstract class NoteRemovedCopyWith<$R, $In extends NoteRemoved, $Out>
3466+
implements HybridWorldEventCopyWith<$R, $In, $Out> {
3467+
@override
3468+
$R call({String? name});
3469+
NoteRemovedCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t);
3470+
}
3471+
3472+
class _NoteRemovedCopyWithImpl<$R, $Out>
3473+
extends ClassCopyWithBase<$R, NoteRemoved, $Out>
3474+
implements NoteRemovedCopyWith<$R, NoteRemoved, $Out> {
3475+
_NoteRemovedCopyWithImpl(super.value, super.then, super.then2);
3476+
3477+
@override
3478+
late final ClassMapperBase<NoteRemoved> $mapper =
3479+
NoteRemovedMapper.ensureInitialized();
3480+
@override
3481+
$R call({String? name}) =>
3482+
$apply(FieldCopyWithData({if (name != null) #name: name}));
3483+
@override
3484+
NoteRemoved $make(CopyWithData data) =>
3485+
NoteRemoved(data.get(#name, or: $value.name));
3486+
3487+
@override
3488+
NoteRemovedCopyWith<$R2, NoteRemoved, $Out2> $chain<$R2, $Out2>(
3489+
Then<$Out2, $R2> t) =>
3490+
_NoteRemovedCopyWithImpl($value, $cast, t);
3491+
}
3492+
32633493
class LocalWorldEventMapper extends SubClassMapperBase<LocalWorldEvent> {
32643494
LocalWorldEventMapper._();
32653495

api/lib/src/event/hybrid.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,17 @@ final class TableRemoved extends HybridWorldEvent with TableRemovedMappable {
9898

9999
TableRemoved(this.name);
100100
}
101+
102+
@MappableClass()
103+
final class NoteChanged extends HybridWorldEvent with NoteChangedMappable {
104+
final String name, content;
105+
106+
NoteChanged(this.name, this.content);
107+
}
108+
109+
@MappableClass()
110+
final class NoteRemoved extends HybridWorldEvent with NoteRemovedMappable {
111+
final String name;
112+
113+
NoteRemoved(this.name);
114+
}

api/lib/src/event/process/server.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,5 +233,10 @@ WorldState? processServerEvent(
233233
return state.copyWith(
234234
tableName: state.tableName == event.name ? '' : state.tableName,
235235
data: state.data.removeTable(event.name));
236+
case NoteChanged():
237+
return state.copyWith(
238+
data: state.data.setNote(event.name, event.content));
239+
case NoteRemoved():
240+
return state.copyWith(data: state.data.removeNote(event.name));
236241
}
237242
}

api/lib/src/models/data.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const kPackBackgroundsPath = 'backgrounds';
2323

2424
const kGameTablePath = 'tables';
2525
const kGameTeamPath = 'teams.json';
26+
const kGameNotesPath = 'notes';
2627

2728
class QuokkaData extends ArchiveData<QuokkaData> {
2829
QuokkaData(super.archive, {super.state});
@@ -52,6 +53,21 @@ class QuokkaData extends ArchiveData<QuokkaData> {
5253

5354
Iterable<String> getTables() => getAssets(kGameTablePath, true);
5455

56+
String? getNote(String name) {
57+
final data = getAsset('$kGameNotesPath/$name.md');
58+
if (data == null) return null;
59+
return utf8.decode(data);
60+
}
61+
62+
QuokkaData setNote(String name, String content) => setAsset(
63+
'$kGameNotesPath/$name.md',
64+
utf8.encode(content),
65+
);
66+
67+
QuokkaData removeNote(String name) => removeAsset('$kGameNotesPath/$name.md');
68+
69+
Iterable<String> getNotes() => getAssets(kGameNotesPath, true);
70+
5571
FileMetadata? getMetadata() {
5672
final data = getAsset(kPackMetadataPath);
5773
if (data == null) {

app/lib/bloc/world/bloc.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ class WorldBloc extends Bloc<PlayableWorldEvent, ClientWorldState> {
8686
data: state.data.setTable(state.table, state.tableName),
8787
));
8888
});
89+
on<DrawerViewChanged>((event, emit) {
90+
emit(state.copyWith(drawerView: event.view));
91+
});
8992
}
9093

9194
Future<void> save() async {

app/lib/bloc/world/local.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:dart_mappable/dart_mappable.dart';
22
import 'package:flutter/material.dart';
3+
import 'package:quokka/bloc/world/state.dart';
34
import 'package:quokka_api/quokka_api.dart';
45

56
part 'local.mapper.dart';
@@ -49,3 +50,11 @@ final class TableSwitched extends LocalWorldEvent with TableSwitchedMappable {
4950

5051
TableSwitched([this.name = '']);
5152
}
53+
54+
@MappableClass()
55+
final class DrawerViewChanged extends LocalWorldEvent
56+
with DrawerViewChangedMappable {
57+
final DrawerView view;
58+
59+
DrawerViewChanged(this.view);
60+
}

0 commit comments

Comments
 (0)