@acorex/platform 19.3.2 → 19.3.3-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/lib/layout/menu/menu.types.d.ts +0 -1
- package/core/lib/expression-evaluator/expression-evaluator.service.d.ts +2 -0
- package/core/lib/types/interactive.types.d.ts +21 -0
- package/core/lib/types/layout.types.d.ts +4 -4
- package/core/lib/utils/object-util.d.ts +1 -0
- package/fesm2022/acorex-platform-common.mjs +2 -1
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +64 -11
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +2 -1
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +0 -1
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +2 -2
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +0 -2
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +287 -0
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-details-view.component-CAa99Vts.mjs +107 -0
- package/fesm2022/acorex-platform-themes-default-details-view.component-CAa99Vts.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-Ol8haGqF.mjs → acorex-platform-themes-default-entity-master-list-view.component-BgE6rxsd.mjs} +5 -6
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BgE6rxsd.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BBJ7Aapd.mjs → acorex-platform-themes-default-entity-master-single-view.component-CnrccLHY.mjs} +9 -9
- package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BBJ7Aapd.mjs.map → acorex-platform-themes-default-entity-master-single-view.component-CnrccLHY.mjs.map} +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +45 -298
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-widgets.mjs +543 -63
- package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
- package/layout/builder/lib/builder/index.d.ts +0 -1
- package/layout/builder/lib/builder/widget-map.d.ts +1 -0
- package/layout/builder/lib/builder/widget.types.d.ts +1 -0
- package/layout/{setting → views}/README.md +1 -1
- package/layout/views/index.d.ts +2 -0
- package/layout/views/lib/details-view/details-view-route.resolver.d.ts +3 -0
- package/layout/views/lib/details-view/details-view.adapter.d.ts +13 -0
- package/layout/views/lib/details-view/details-view.viewmodel.d.ts +30 -0
- package/layout/views/lib/details-view/index.d.ts +3 -0
- package/layout/views/lib/details-view/sample.d.ts +2 -0
- package/layout/views/lib/shared/index.d.ts +1 -0
- package/layout/views/lib/shared/layout.types.d.ts +7 -0
- package/package.json +4 -8
- package/themes/default/index.d.ts +0 -1
- package/themes/default/lib/layouts/base/base-page.component.d.ts +1 -4
- package/themes/default/lib/layouts/base/index.d.ts +0 -1
- package/themes/default/lib/layouts/base/page-layout/page-layout.component.d.ts +1 -0
- package/themes/default/lib/layouts/details-view/details-view.component.d.ts +45 -0
- package/widgets/lib/properties/layout.props.d.ts +1 -0
- package/widgets/lib/widgets/advance/cron-job/cron-job-widget-designer.component.d.ts +1 -0
- package/widgets/lib/widgets/advance/cron-job/cron-job-widget-edit.component.d.ts +1 -0
- package/widgets/lib/widgets/editors/time-duration/index.d.ts +6 -0
- package/widgets/lib/widgets/editors/time-duration/time-duration-widget-column.component.d.ts +6 -0
- package/widgets/lib/widgets/editors/time-duration/time-duration-widget-edit.component.d.ts +12 -0
- package/widgets/lib/widgets/editors/time-duration/time-duration-widget-filter.component.d.ts +6 -0
- package/widgets/lib/widgets/editors/time-duration/time-duration-widget-print.component.d.ts +6 -0
- package/widgets/lib/widgets/editors/time-duration/time-duration-widget-view.component.d.ts +7 -0
- package/widgets/lib/widgets/editors/time-duration/time-duration-widget.config.d.ts +11 -0
- package/widgets/lib/widgets/filters/select-filter/select-filter-widget-edit.component.d.ts +4 -1
- package/widgets/lib/widgets/layout/form-field/form-field-widget-designer.component.d.ts +2 -2
- package/widgets/lib/widgets/layout/tabset/index.d.ts +3 -0
- package/widgets/lib/widgets/layout/tabset/tabset-widget-designer.component.d.ts +6 -0
- package/widgets/lib/widgets/layout/tabset/tabset-widget-view.component.d.ts +19 -0
- package/widgets/lib/widgets/layout/tabset/tabset-widget.config.d.ts +2 -0
- package/widgets/lib/widgets/layout/tabset/tabset-widget.types.d.ts +2 -0
- package/widgets/lib/widgets/layout/tabset-item/index.d.ts +3 -0
- package/widgets/lib/widgets/layout/tabset-item/tabset-item-widget-designer.component.d.ts +6 -0
- package/widgets/lib/widgets/layout/tabset-item/tabset-item-widget-view.component.d.ts +10 -0
- package/widgets/lib/widgets/layout/tabset-item/tabset-item-widget.config.d.ts +2 -0
- package/widgets/lib/widgets/property-editors/flex-options/flex-options-widget-editor.component.d.ts +3 -3
- package/widgets/lib/widgets/property-editors/flex-options/flex-options-widget.type.d.ts +2 -2
- package/fesm2022/acorex-platform-layout-search.mjs +0 -279
- package/fesm2022/acorex-platform-layout-search.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-setting.mjs +0 -406
- package/fesm2022/acorex-platform-layout-setting.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-Ol8haGqF.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-search-popup.component-ChJiJ12h.mjs +0 -128
- package/fesm2022/acorex-platform-themes-default-search-popup.component-ChJiJ12h.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-setting-page.component-BxGzaKws.mjs +0 -219
- package/fesm2022/acorex-platform-themes-default-setting-page.component-BxGzaKws.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-setting-view.component-CjmlI9Jb.mjs +0 -103
- package/fesm2022/acorex-platform-themes-default-setting-view.component-CjmlI9Jb.mjs.map +0 -1
- package/layout/builder/lib/builder/view.types.d.ts +0 -94
- package/layout/search/README.md +0 -3
- package/layout/search/index.d.ts +0 -1
- package/layout/search/lib/index.d.ts +0 -3
- package/layout/search/lib/search-slot.component.d.ts +0 -9
- package/layout/search/lib/search.config.d.ts +0 -5
- package/layout/search/lib/search.module.d.ts +0 -11
- package/layout/search/lib/search.viewmodel.d.ts +0 -34
- package/layout/search/lib/workflows/search.workflow.d.ts +0 -11
- package/layout/setting/index.d.ts +0 -2
- package/layout/setting/lib/convert-setting-data.d.ts +0 -2
- package/layout/setting/lib/search-definition.provider.d.ts +0 -4
- package/layout/setting/lib/search.provider.d.ts +0 -9
- package/layout/setting/lib/setting.viewmodel.d.ts +0 -46
- package/layout/setting/lib/settings.module.d.ts +0 -9
- package/themes/default/lib/layouts/base/simple-page/index.d.ts +0 -1
- package/themes/default/lib/layouts/base/simple-page/simple-page.layout.d.ts +0 -78
- package/themes/default/lib/layouts/search-layout/search-popup.component.d.ts +0 -22
- package/themes/default/lib/layouts/setting-layout/setting-page/setting-page.component.d.ts +0 -65
- package/themes/default/lib/layouts/setting-layout/setting-view/setting-view.component.d.ts +0 -135
- package/themes/default/lib/layouts/view-layouts/index.d.ts +0 -1
- package/themes/default/lib/layouts/view-layouts/layout-detail-view/layout-detail-view.component.d.ts +0 -19
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, HostListener, Component, Injectable, NgModule, signal, computed } from '@angular/core';
|
|
3
|
-
import * as i2$1 from '@acorex/platform/common';
|
|
4
|
-
import { AXPComponentSlotModule, AXPSearchService, AXPSettingService } from '@acorex/platform/common';
|
|
5
|
-
import * as i3$1 from '@acorex/platform/workflow';
|
|
6
|
-
import { AXPWorkflowService, AXPWorkflowAction, AXPWorkflowModule } from '@acorex/platform/workflow';
|
|
7
|
-
import * as i2 from '@acorex/components/button';
|
|
8
|
-
import { AXButtonModule } from '@acorex/components/button';
|
|
9
|
-
import * as i3 from '@acorex/components/decorators';
|
|
10
|
-
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
11
|
-
import * as i1 from '@angular/common';
|
|
12
|
-
import { CommonModule } from '@angular/common';
|
|
13
|
-
import * as i4 from '@acorex/core/translation';
|
|
14
|
-
import { AXTranslationModule } from '@acorex/core/translation';
|
|
15
|
-
import { AXTextBoxModule } from '@acorex/components/text-box';
|
|
16
|
-
import { AXPopupService } from '@acorex/components/popup';
|
|
17
|
-
import * as i1$1 from '@acorex/platform/core';
|
|
18
|
-
import { AXPPlatformScope } from '@acorex/platform/core';
|
|
19
|
-
import { Subject } from 'rxjs';
|
|
20
|
-
|
|
21
|
-
const AXP_GLOBAL_SEARCH_CONFIG_TOKEN = new InjectionToken('AXP_GLOBAL_SEARCH_CONFIG_TOKEN');
|
|
22
|
-
|
|
23
|
-
class AXPGlobalSearchSlotComponent {
|
|
24
|
-
constructor() {
|
|
25
|
-
this.workflow = inject(AXPWorkflowService);
|
|
26
|
-
}
|
|
27
|
-
async startSearch() {
|
|
28
|
-
await this.workflow.execute('global-search');
|
|
29
|
-
}
|
|
30
|
-
async handleKeyboardEvent(event) {
|
|
31
|
-
if (event.ctrlKey) {
|
|
32
|
-
switch (event.code) {
|
|
33
|
-
case 'KeyK':
|
|
34
|
-
event.preventDefault();
|
|
35
|
-
event.stopPropagation();
|
|
36
|
-
await this.startSearch();
|
|
37
|
-
break;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AXPGlobalSearchSlotComponent, isStandalone: true, selector: "ng-component", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: `
|
|
43
|
-
<ax-button color="primary" class="ax-flex md:ax-hidden" (onClick)="startSearch()">
|
|
44
|
-
<ax-icon class="fa-regular fa-search">
|
|
45
|
-
</ax-icon>
|
|
46
|
-
</ax-button>
|
|
47
|
-
<div class="ax-bg-primary-200/15 ax-h-10 ax-w-72 ax-rounded-default ax-cursor-pointer ax-justify-between ax-hidden md:ax-flex ax-items-center ax-px-3 hover:ax-bg-primary-200/30 ax-text-primary-text" (click)="startSearch()" *translate="let t">
|
|
48
|
-
<div class="ax-flex ax-items-center ax-gap-2">
|
|
49
|
-
<i class="fa-light fa-search ax-text-xl"></i>
|
|
50
|
-
<span>{{ t('search-placeholder',{scope:'global-search'}) | async}}</span>
|
|
51
|
-
</div>
|
|
52
|
-
<kbd class="ax-text-sm">Ctrl+K</kbd>
|
|
53
|
-
</div>
|
|
54
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXTextBoxModule }] }); }
|
|
55
|
-
}
|
|
56
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchSlotComponent, decorators: [{
|
|
57
|
-
type: Component,
|
|
58
|
-
args: [{
|
|
59
|
-
template: `
|
|
60
|
-
<ax-button color="primary" class="ax-flex md:ax-hidden" (onClick)="startSearch()">
|
|
61
|
-
<ax-icon class="fa-regular fa-search">
|
|
62
|
-
</ax-icon>
|
|
63
|
-
</ax-button>
|
|
64
|
-
<div class="ax-bg-primary-200/15 ax-h-10 ax-w-72 ax-rounded-default ax-cursor-pointer ax-justify-between ax-hidden md:ax-flex ax-items-center ax-px-3 hover:ax-bg-primary-200/30 ax-text-primary-text" (click)="startSearch()" *translate="let t">
|
|
65
|
-
<div class="ax-flex ax-items-center ax-gap-2">
|
|
66
|
-
<i class="fa-light fa-search ax-text-xl"></i>
|
|
67
|
-
<span>{{ t('search-placeholder',{scope:'global-search'}) | async}}</span>
|
|
68
|
-
</div>
|
|
69
|
-
<kbd class="ax-text-sm">Ctrl+K</kbd>
|
|
70
|
-
</div>
|
|
71
|
-
`,
|
|
72
|
-
imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXTranslationModule, AXTextBoxModule]
|
|
73
|
-
}]
|
|
74
|
-
}], propDecorators: { handleKeyboardEvent: [{
|
|
75
|
-
type: HostListener,
|
|
76
|
-
args: ['document:keydown', ['$event']]
|
|
77
|
-
}] } });
|
|
78
|
-
|
|
79
|
-
class AXPGlobalSearchStartAction extends AXPWorkflowAction {
|
|
80
|
-
constructor() {
|
|
81
|
-
super(...arguments);
|
|
82
|
-
this.popupService = inject(AXPopupService);
|
|
83
|
-
this.workflow = inject(AXPWorkflowService);
|
|
84
|
-
this.config = inject(AXP_GLOBAL_SEARCH_CONFIG_TOKEN);
|
|
85
|
-
}
|
|
86
|
-
async execute(context) {
|
|
87
|
-
const component = await this.config.window();
|
|
88
|
-
const popup = await this.popupService.open(component, {
|
|
89
|
-
title: 'Search...',
|
|
90
|
-
size: 'fit',
|
|
91
|
-
closeOnBackdropClick: true,
|
|
92
|
-
data: {
|
|
93
|
-
text: context.getVariable('text'),
|
|
94
|
-
},
|
|
95
|
-
header: false,
|
|
96
|
-
});
|
|
97
|
-
if (popup.data) {
|
|
98
|
-
const result = popup.data;
|
|
99
|
-
if (result && result.command) {
|
|
100
|
-
this.workflow.execute(result.command?.name, result.command?.options);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchStartAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
105
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchStartAction }); }
|
|
106
|
-
}
|
|
107
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchStartAction, decorators: [{
|
|
108
|
-
type: Injectable
|
|
109
|
-
}] });
|
|
110
|
-
const AXPGlobalSearchWorkflow = {
|
|
111
|
-
startStepId: 'start',
|
|
112
|
-
steps: {
|
|
113
|
-
start: {
|
|
114
|
-
action: 'AXPGlobalSearchStartAction',
|
|
115
|
-
},
|
|
116
|
-
},
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
class AXPGlobalSearchModule {
|
|
120
|
-
constructor(appInitService, injector) {
|
|
121
|
-
}
|
|
122
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchModule, deps: [{ token: i1$1.AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
123
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchModule, imports: [i2$1.AXPComponentSlotModule, i3$1.AXPWorkflowModule] }); }
|
|
124
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchModule, imports: [AXPComponentSlotModule.forChild({
|
|
125
|
-
'header-start': [
|
|
126
|
-
{
|
|
127
|
-
priority: 0,
|
|
128
|
-
name: 'search',
|
|
129
|
-
component: AXPGlobalSearchSlotComponent,
|
|
130
|
-
},
|
|
131
|
-
],
|
|
132
|
-
}),
|
|
133
|
-
//
|
|
134
|
-
AXPWorkflowModule.forChild({
|
|
135
|
-
actions: {
|
|
136
|
-
AXPGlobalSearchStartAction
|
|
137
|
-
},
|
|
138
|
-
workflows: {
|
|
139
|
-
'global-search': AXPGlobalSearchWorkflow,
|
|
140
|
-
},
|
|
141
|
-
})] }); }
|
|
142
|
-
}
|
|
143
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchModule, decorators: [{
|
|
144
|
-
type: NgModule,
|
|
145
|
-
args: [{
|
|
146
|
-
imports: [
|
|
147
|
-
AXPComponentSlotModule.forChild({
|
|
148
|
-
'header-start': [
|
|
149
|
-
{
|
|
150
|
-
priority: 0,
|
|
151
|
-
name: 'search',
|
|
152
|
-
component: AXPGlobalSearchSlotComponent,
|
|
153
|
-
},
|
|
154
|
-
],
|
|
155
|
-
}),
|
|
156
|
-
//
|
|
157
|
-
AXPWorkflowModule.forChild({
|
|
158
|
-
actions: {
|
|
159
|
-
AXPGlobalSearchStartAction
|
|
160
|
-
},
|
|
161
|
-
workflows: {
|
|
162
|
-
'global-search': AXPGlobalSearchWorkflow,
|
|
163
|
-
},
|
|
164
|
-
})
|
|
165
|
-
],
|
|
166
|
-
exports: [],
|
|
167
|
-
declarations: [],
|
|
168
|
-
providers: []
|
|
169
|
-
}]
|
|
170
|
-
}], ctorParameters: () => [{ type: i1$1.AXPAppStartUpService }, { type: i0.Injector }] });
|
|
171
|
-
|
|
172
|
-
class AXPGlobalSearchViewModel {
|
|
173
|
-
constructor() {
|
|
174
|
-
this.settingKeys = {
|
|
175
|
-
recent: "global-search:recents:items",
|
|
176
|
-
pinned: "global-search:pinned:items"
|
|
177
|
-
};
|
|
178
|
-
this.searchService = inject(AXPSearchService);
|
|
179
|
-
this.settingService = inject(AXPSettingService);
|
|
180
|
-
this._text = signal(null);
|
|
181
|
-
this.text = this._text.asReadonly();
|
|
182
|
-
this._results = signal([]);
|
|
183
|
-
this.results = this._results.asReadonly();
|
|
184
|
-
this._isBusy = signal(false);
|
|
185
|
-
this.isBusy = this._isBusy.asReadonly();
|
|
186
|
-
this.isEmpty = computed(() => this.text() && this.results().length == 0);
|
|
187
|
-
this.isValid = computed(() => (this.text()?.length ?? 0) > 2);
|
|
188
|
-
this.isStart = computed(() => !this.isEmpty() && this.results().length == 0);
|
|
189
|
-
this.isWelcome = computed(() => this.isStart() && this.pinnedItems().length == 0 && this.recentItems().length == 0);
|
|
190
|
-
this._recentItems = signal([]);
|
|
191
|
-
this._pinnedItems = signal([]);
|
|
192
|
-
this.pinnedItems = this._pinnedItems.asReadonly();
|
|
193
|
-
this.recentItems = computed(() => this.getTopRecentItems());
|
|
194
|
-
this.onItemSelected = new Subject();
|
|
195
|
-
this.loadSettings();
|
|
196
|
-
}
|
|
197
|
-
async search(text) {
|
|
198
|
-
this._isBusy.set(true);
|
|
199
|
-
this._text.set(text);
|
|
200
|
-
if (!this.isValid()) {
|
|
201
|
-
this._results.set([]);
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
await new Promise((resolve) => setTimeout(resolve, 250));
|
|
205
|
-
const results = await this.searchService.search(text);
|
|
206
|
-
this._results.set(results);
|
|
207
|
-
}
|
|
208
|
-
this._isBusy.set(false);
|
|
209
|
-
}
|
|
210
|
-
async execute(item) {
|
|
211
|
-
this.onItemSelected.next(item);
|
|
212
|
-
await this.updateSelectionHistory(item);
|
|
213
|
-
}
|
|
214
|
-
async pin(item) {
|
|
215
|
-
const currentPinned = this._pinnedItems();
|
|
216
|
-
if (!currentPinned.some(i => i.id === item.id)) {
|
|
217
|
-
this._pinnedItems.set([item, ...currentPinned].slice(0, 5));
|
|
218
|
-
await this.saveSettings();
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
async unpin(item) {
|
|
222
|
-
const currentPinned = this._pinnedItems();
|
|
223
|
-
this._pinnedItems.set(currentPinned.filter(i => i.id !== item.id));
|
|
224
|
-
await this.saveSettings();
|
|
225
|
-
}
|
|
226
|
-
async togglePin(item) {
|
|
227
|
-
if (this.isPinned(item)) {
|
|
228
|
-
await this.unpin(item);
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
await this.pin(item);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
isPinned(item) {
|
|
235
|
-
const currentPinned = this._pinnedItems();
|
|
236
|
-
return currentPinned.some(i => i.id === item.id);
|
|
237
|
-
}
|
|
238
|
-
async updateSelectionHistory(item) {
|
|
239
|
-
// Update recent selections
|
|
240
|
-
const currentHistory = this._recentItems();
|
|
241
|
-
const updatedHistory = [item, ...currentHistory.filter(i => i.id !== item.id)].slice(0, 5);
|
|
242
|
-
this._recentItems.set(updatedHistory);
|
|
243
|
-
// Save updated settings
|
|
244
|
-
await this.saveSettings();
|
|
245
|
-
}
|
|
246
|
-
getTopRecentItems() {
|
|
247
|
-
const pinnedIds = new Set(this._pinnedItems().map(item => item.id));
|
|
248
|
-
return this._recentItems().filter(item => !pinnedIds.has(item.id)).slice(0, 5);
|
|
249
|
-
}
|
|
250
|
-
async clearRecentItems() {
|
|
251
|
-
this._recentItems.set([]);
|
|
252
|
-
await this.settingService.scope(AXPPlatformScope.User).set(this.settingKeys.recent, []);
|
|
253
|
-
}
|
|
254
|
-
async loadSettings() {
|
|
255
|
-
// Load recent selections
|
|
256
|
-
const recent = await this.settingService.get(this.settingKeys.recent);
|
|
257
|
-
if (recent) {
|
|
258
|
-
this._recentItems.set(recent.slice(0, 5));
|
|
259
|
-
}
|
|
260
|
-
// Load pinned items
|
|
261
|
-
const pinned = await this.settingService.get(this.settingKeys.pinned);
|
|
262
|
-
if (pinned) {
|
|
263
|
-
this._pinnedItems.set(pinned.slice(0, 5));
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
async saveSettings() {
|
|
267
|
-
// Save recent selections
|
|
268
|
-
await this.settingService.scope(AXPPlatformScope.User).set(this.settingKeys.recent, this._recentItems().slice(0, 5));
|
|
269
|
-
// Save pinned items
|
|
270
|
-
await this.settingService.scope(AXPPlatformScope.User).set(this.settingKeys.pinned, this._pinnedItems().slice(0, 5));
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Generated bundle index. Do not edit.
|
|
276
|
-
*/
|
|
277
|
-
|
|
278
|
-
export { AXPGlobalSearchModule, AXPGlobalSearchViewModel, AXP_GLOBAL_SEARCH_CONFIG_TOKEN };
|
|
279
|
-
//# sourceMappingURL=acorex-platform-layout-search.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-layout-search.mjs","sources":["../../../../libs/platform/layout/search/src/lib/search.config.ts","../../../../libs/platform/layout/search/src/lib/search-slot.component.ts","../../../../libs/platform/layout/search/src/lib/workflows/search.workflow.ts","../../../../libs/platform/layout/search/src/lib/search.module.ts","../../../../libs/platform/layout/search/src/lib/search.viewmodel.ts","../../../../libs/platform/layout/search/src/acorex-platform-layout-search.ts"],"sourcesContent":["import { InjectionToken, Type } from \"@angular/core\";\n\nexport interface AXPGlobalSearchConfigs {\n window: () => Type<any>;\n}\n\nexport const AXP_GLOBAL_SEARCH_CONFIG_TOKEN = new InjectionToken<AXPGlobalSearchConfigs>('AXP_GLOBAL_SEARCH_CONFIG_TOKEN');","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { CommonModule } from '@angular/common';\nimport { Component, HostListener, inject } from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\n\n@Component({\n template: `\n <ax-button color=\"primary\" class=\"ax-flex md:ax-hidden\" (onClick)=\"startSearch()\">\n <ax-icon class=\"fa-regular fa-search\">\n </ax-icon>\n </ax-button>\n <div class=\"ax-bg-primary-200/15 ax-h-10 ax-w-72 ax-rounded-default ax-cursor-pointer ax-justify-between ax-hidden md:ax-flex ax-items-center ax-px-3 hover:ax-bg-primary-200/30 ax-text-primary-text\" (click)=\"startSearch()\" *translate=\"let t\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <i class=\"fa-light fa-search ax-text-xl\"></i>\n <span>{{ t('search-placeholder',{scope:'global-search'}) | async}}</span>\n </div>\n <kbd class=\"ax-text-sm\">Ctrl+K</kbd>\n </div>\n `,\n imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXTranslationModule, AXTextBoxModule]\n})\nexport class AXPGlobalSearchSlotComponent {\n\n protected workflow = inject(AXPWorkflowService);\n\n protected async startSearch() {\n await this.workflow.execute('global-search')\n }\n\n @HostListener('document:keydown', ['$event'])\n private async handleKeyboardEvent(event: KeyboardEvent) {\n if (event.ctrlKey) {\n switch (event.code) {\n case 'KeyK':\n event.preventDefault();\n event.stopPropagation();\n await this.startSearch();\n break;\n }\n }\n\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext, AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_GLOBAL_SEARCH_CONFIG_TOKEN } from '../search.config';\nimport { AXPSearchDisplayResult } from '@acorex/platform/common';\n\n@Injectable()\nexport class AXPGlobalSearchStartAction extends AXPWorkflowAction {\n private popupService = inject(AXPopupService);\n private workflow = inject(AXPWorkflowService);\n private config = inject(AXP_GLOBAL_SEARCH_CONFIG_TOKEN);\n\n override async execute(context: AXPWorkflowContext): Promise<void> {\n const component = await this.config.window();\n const popup = await this.popupService.open(component, {\n title: 'Search...',\n size: 'fit',\n closeOnBackdropClick: true,\n data: {\n text: context.getVariable('text'),\n },\n header: false,\n });\n if (popup.data) {\n const result = popup.data as AXPSearchDisplayResult;\n if (result && result.command) {\n this.workflow.execute(result.command?.name, result.command?.options);\n }\n }\n }\n}\n\nexport const AXPGlobalSearchWorkflow: AXPWorkflow = {\n startStepId: 'start',\n steps: {\n start: {\n action: 'AXPGlobalSearchStartAction',\n },\n },\n};\n","import { AXPComponentSlotModule } from '@acorex/platform/common';\nimport { Injector, NgModule } from '@angular/core';\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport { AXPGlobalSearchSlotComponent } from './search-slot.component';\nimport { AXPGlobalSearchStartAction, AXPGlobalSearchWorkflow } from './workflows/search.workflow';\nimport { AXPAppStartUpService } from '@acorex/platform/core';\n\n@NgModule({\n imports: [\n AXPComponentSlotModule.forChild({\n 'header-start': [\n {\n priority: 0,\n name: 'search',\n component: AXPGlobalSearchSlotComponent,\n },\n ],\n }),\n //\n AXPWorkflowModule.forChild({\n actions: {\n AXPGlobalSearchStartAction\n },\n workflows: {\n 'global-search': AXPGlobalSearchWorkflow,\n },\n })\n ],\n exports: [],\n declarations: [],\n providers: []\n})\nexport class AXPGlobalSearchModule {\n constructor(\n appInitService: AXPAppStartUpService,\n injector: Injector\n ) {\n\n }\n}\n","import { AXPSearchDisplayGroupResult, AXPSearchDisplayResult, AXPSearchService, AXPSettingService } from \"@acorex/platform/common\";\nimport { AXPPlatformScope } from \"@acorex/platform/core\";\nimport { computed, inject, signal } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\nexport class AXPGlobalSearchViewModel {\n\n private settingKeys = {\n recent: \"global-search:recents:items\",\n pinned: \"global-search:pinned:items\"\n }\n\n private searchService = inject(AXPSearchService);\n private settingService = inject(AXPSettingService);\n\n private _text = signal<string | null>(null);\n public text = this._text.asReadonly();\n\n private _results = signal<AXPSearchDisplayGroupResult[]>([]);\n public results = this._results.asReadonly();\n\n private _isBusy = signal(false);\n public isBusy = this._isBusy.asReadonly();\n\n public isEmpty = computed(() => this.text() && this.results().length == 0);\n\n public isValid = computed(() => (this.text()?.length ?? 0) > 2);\n\n public isStart = computed(() => !this.isEmpty() && this.results().length == 0);\n\n public isWelcome = computed(() => this.isStart() && this.pinnedItems().length == 0 && this.recentItems().length == 0);\n\n private _recentItems = signal<AXPSearchDisplayResult[]>([]);\n private _pinnedItems = signal<AXPSearchDisplayResult[]>([]);\n public pinnedItems = this._pinnedItems.asReadonly();\n public recentItems = computed(() => this.getTopRecentItems());\n\n public readonly onItemSelected = new Subject<AXPSearchDisplayResult>();\n\n constructor() {\n this.loadSettings();\n }\n\n public async search(text: string): Promise<void> {\n this._isBusy.set(true);\n this._text.set(text);\n\n if (!this.isValid()) {\n this._results.set([]);\n } else {\n await new Promise((resolve) => setTimeout(resolve, 250));\n\n const results = await this.searchService.search(text);\n this._results.set(results);\n }\n\n this._isBusy.set(false);\n }\n\n public async execute(item: AXPSearchDisplayResult): Promise<void> {\n this.onItemSelected.next(item);\n await this.updateSelectionHistory(item);\n }\n\n public async pin(item: AXPSearchDisplayResult): Promise<void> {\n const currentPinned = this._pinnedItems();\n if (!currentPinned.some(i => i.id === item.id)) {\n this._pinnedItems.set([item, ...currentPinned].slice(0, 5));\n await this.saveSettings();\n }\n }\n\n public async unpin(item: AXPSearchDisplayResult): Promise<void> {\n const currentPinned = this._pinnedItems();\n this._pinnedItems.set(currentPinned.filter(i => i.id !== item.id));\n await this.saveSettings();\n }\n\n public async togglePin(item: AXPSearchDisplayResult): Promise<void> {\n if (this.isPinned(item)) {\n await this.unpin(item);\n } else {\n await this.pin(item);\n }\n }\n\n public isPinned(item: AXPSearchDisplayResult): boolean {\n const currentPinned = this._pinnedItems();\n return currentPinned.some(i => i.id === item.id);\n }\n\n private async updateSelectionHistory(item: AXPSearchDisplayResult): Promise<void> {\n // Update recent selections\n const currentHistory = this._recentItems();\n const updatedHistory = [item, ...currentHistory.filter(i => i.id !== item.id)].slice(0, 5);\n this._recentItems.set(updatedHistory);\n\n // Save updated settings\n await this.saveSettings();\n }\n\n private getTopRecentItems(): AXPSearchDisplayResult[] {\n const pinnedIds = new Set(this._pinnedItems().map(item => item.id));\n return this._recentItems().filter(item => !pinnedIds.has(item.id)).slice(0, 5);\n }\n\n public async clearRecentItems() {\n this._recentItems.set([]);\n await this.settingService.scope(AXPPlatformScope.User).set(this.settingKeys.recent, []);\n }\n\n private async loadSettings(): Promise<void> {\n // Load recent selections\n const recent = await this.settingService.get<AXPSearchDisplayResult[]>(this.settingKeys.recent);\n if (recent) {\n this._recentItems.set(recent.slice(0, 5));\n }\n\n // Load pinned items\n const pinned = await this.settingService.get<AXPSearchDisplayResult[]>(this.settingKeys.pinned);\n if (pinned) {\n this._pinnedItems.set(pinned.slice(0, 5));\n }\n }\n\n private async saveSettings(): Promise<void> {\n // Save recent selections\n await this.settingService.scope(AXPPlatformScope.User).set(this.settingKeys.recent, this._recentItems().slice(0, 5));\n\n // Save pinned items\n await this.settingService.scope(AXPPlatformScope.User).set(this.settingKeys.pinned, this._pinnedItems().slice(0, 5));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}
|