import 'package:bloc/bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:paperless_api/paperless_api.dart'; import 'package:paperless_mobile/core/repository/label_repository.dart'; part 'label_cubit.freezed.dart'; part 'label_state.dart'; class LabelCubit extends Cubit { final LabelRepository labelRepository; LabelCubit(this.labelRepository) : super(const LabelState()) { labelRepository.addListener(_updateStateListener); } void _updateStateListener() { emit(state.copyWith( correspondents: labelRepository.correspondents, documentTypes: labelRepository.documentTypes, storagePaths: labelRepository.storagePaths, tags: labelRepository.tags, )); } Future reload({ required bool loadCorrespondents, required bool loadDocumentTypes, required bool loadStoragePaths, required bool loadTags, }) { return labelRepository.initialize( loadCorrespondents: loadCorrespondents, loadDocumentTypes: loadDocumentTypes, loadStoragePaths: loadStoragePaths, loadTags: loadTags, ); } Future addCorrespondent(Correspondent item) async { assert(item.id == null); final addedItem = await labelRepository.createCorrespondent(item); return addedItem; } Future reloadCorrespondents() { return labelRepository.findAllCorrespondents(); } Future replaceCorrespondent(Correspondent item) async { assert(item.id != null); final updatedItem = await labelRepository.updateCorrespondent(item); return updatedItem; } Future removeCorrespondent(Correspondent item) async { assert(item.id != null); if (labelRepository.correspondents.containsKey(item.id)) { await labelRepository.deleteCorrespondent(item); } } Future addDocumentType(DocumentType item) async { assert(item.id == null); final addedItem = await labelRepository.createDocumentType(item); return addedItem; } Future reloadDocumentTypes() { return labelRepository.findAllDocumentTypes(); } Future replaceDocumentType(DocumentType item) async { assert(item.id != null); final updatedItem = await labelRepository.updateDocumentType(item); return updatedItem; } Future removeDocumentType(DocumentType item) async { assert(item.id != null); if (labelRepository.documentTypes.containsKey(item.id)) { await labelRepository.deleteDocumentType(item); } } Future addStoragePath(StoragePath item) async { assert(item.id == null); final addedItem = await labelRepository.createStoragePath(item); return addedItem; } Future reloadStoragePaths() { return labelRepository.findAllStoragePaths(); } Future replaceStoragePath(StoragePath item) async { assert(item.id != null); final updatedItem = await labelRepository.updateStoragePath(item); return updatedItem; } Future removeStoragePath(StoragePath item) async { assert(item.id != null); if (labelRepository.storagePaths.containsKey(item.id)) { await labelRepository.deleteStoragePath(item); } } Future addTag(Tag item) async { assert(item.id == null); final addedItem = await labelRepository.createTag(item); return addedItem; } Future reloadTags() { return labelRepository.findAllTags(); } Future replaceTag(Tag item) async { assert(item.id != null); final updatedItem = await labelRepository.updateTag(item); return updatedItem; } Future removeTag(Tag item) async { assert(item.id != null); if (labelRepository.tags.containsKey(item.id)) { await labelRepository.deleteTag(item); } } @override Future close() { labelRepository.removeListener(_updateStateListener); return super.close(); } }