-
-
Notifications
You must be signed in to change notification settings - Fork 477
/
cf.menu.controller.ts
81 lines (69 loc) · 3.14 KB
/
cf.menu.controller.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/**
* Copyright 2023-present DreamNum Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http:https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import type { IDisposable } from '@wendellhu/redi';
import { Inject, Injector } from '@wendellhu/redi';
import { Disposable, IUniverInstanceService, LifecycleStages, LocaleService, OnLifecycle, UniverInstanceType } from '@univerjs/core';
import type { MenuConfig } from '@univerjs/ui';
import { ComponentManager, IMenuService, ISidebarService } from '@univerjs/ui';
import type { IConditionFormattingRule } from '@univerjs/sheets-conditional-formatting';
import { FactoryManageConditionalFormattingRule } from '../menu/manage-rule';
import { ConditionFormattingPanel } from '../components/panel';
export interface IUniverSheetsConditionalFormattingUIConfig {
menu: MenuConfig;
skipConditionalFormattingCore?: boolean;
}
export const DefaultSheetConditionalFormattingUiConfig = {};
const CF_PANEL_KEY = 'sheet.conditional.formatting.panel';
@OnLifecycle(LifecycleStages.Ready, ConditionalFormattingMenuController)
export class ConditionalFormattingMenuController extends Disposable {
private _sidebarDisposable: IDisposable | null = null;
constructor(
private readonly _config: Partial<IUniverSheetsConditionalFormattingUIConfig>,
@IUniverInstanceService private readonly _univerInstanceService: IUniverInstanceService,
@Inject(Injector) private _injector: Injector,
@Inject(ComponentManager) private _componentManager: ComponentManager,
@Inject(IMenuService) private _menuService: IMenuService,
@Inject(ISidebarService) private _sidebarService: ISidebarService,
@Inject(LocaleService) private _localeService: LocaleService
) {
super();
this._initMenu();
this._initPanel();
this.disposeWithMe(
this._univerInstanceService.getCurrentTypeOfUnit$(UniverInstanceType.UNIVER_SHEET).subscribe((sheet) => {
if (!sheet) this._sidebarDisposable?.dispose();
})
);
}
openPanel(rule?: IConditionFormattingRule) {
const props = {
header: { title: this._localeService.t('sheet.cf.title') },
children: {
label: CF_PANEL_KEY,
rule,
},
onClose: () => this._sidebarDisposable = null,
};
this._sidebarDisposable = this._sidebarService.open(props);
}
private _initMenu() {
const { menu = {} } = this._config;
this._menuService.addMenuItem(FactoryManageConditionalFormattingRule(this._injector), menu);
}
private _initPanel() {
this._componentManager.register(CF_PANEL_KEY, ConditionFormattingPanel);
}
}