* fix: remove unused imports and variables (part 1) Resolve oxlint no-unused-vars warnings in packages/*, apps/admin, apps/space, apps/live, and apps/web (non-core). * fix: resolve CI check failures * fix: resolve check:types failures * fix: resolve check:types and check:format failures - Use destructuring alias for activeCycleResolvedPath - Format propel tab-navigation file * fix: format propel button helper with oxfmt Reorder Tailwind classes to match oxfmt canonical ordering.
71 lines
1.9 KiB
TypeScript
71 lines
1.9 KiB
TypeScript
/**
|
|
* Copyright (c) 2023-present Plane Software, Inc. and contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
* See the LICENSE file for details.
|
|
*/
|
|
|
|
import { set } from "lodash-es";
|
|
import { action, computed, makeObservable, observable, runInAction } from "mobx";
|
|
// plane imports
|
|
import { SitesLabelService } from "@plane/services";
|
|
import type { IIssueLabel } from "@plane/types";
|
|
// store
|
|
import type { RootStore } from "./root.store";
|
|
|
|
export interface IIssueLabelStore {
|
|
// observables
|
|
labels: IIssueLabel[] | undefined;
|
|
// computed actions
|
|
getLabelById: (labelId: string | undefined) => IIssueLabel | undefined;
|
|
getLabelsByIds: (labelIds: string[]) => IIssueLabel[];
|
|
// fetch actions
|
|
fetchLabels: (anchor: string) => Promise<IIssueLabel[]>;
|
|
}
|
|
|
|
export class LabelStore implements IIssueLabelStore {
|
|
labelMap: Record<string, IIssueLabel> = {};
|
|
labelService: SitesLabelService;
|
|
rootStore: RootStore;
|
|
|
|
constructor(_rootStore: RootStore) {
|
|
makeObservable(this, {
|
|
// observables
|
|
labelMap: observable,
|
|
// computed
|
|
labels: computed,
|
|
// fetch action
|
|
fetchLabels: action,
|
|
});
|
|
this.labelService = new SitesLabelService();
|
|
this.rootStore = _rootStore;
|
|
}
|
|
|
|
get labels() {
|
|
return Object.values(this.labelMap);
|
|
}
|
|
|
|
getLabelById = (labelId: string | undefined) => (labelId ? this.labelMap[labelId] : undefined);
|
|
|
|
getLabelsByIds = (labelIds: string[]) => {
|
|
const currLabels = [];
|
|
for (const labelId of labelIds) {
|
|
const label = this.getLabelById(labelId);
|
|
if (label) {
|
|
currLabels.push(label);
|
|
}
|
|
}
|
|
|
|
return currLabels;
|
|
};
|
|
|
|
fetchLabels = async (anchor: string) => {
|
|
const labelsResponse = await this.labelService.list(anchor);
|
|
runInAction(() => {
|
|
this.labelMap = {};
|
|
for (const label of labelsResponse) {
|
|
set(this.labelMap, [label.id], label);
|
|
}
|
|
});
|
|
return labelsResponse;
|
|
};
|
|
}
|