@solar-angular/ui-zorro 19.3.3 → 19.3.4
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/crud/page.d.ts
CHANGED
|
@@ -9,7 +9,9 @@ import { Searcher } from './searcher';
|
|
|
9
9
|
* @template V Data 的模型类型,默认为 U
|
|
10
10
|
*/
|
|
11
11
|
export declare abstract class CrudPage<T, U = T, V = U> {
|
|
12
|
-
|
|
12
|
+
readonly _data: import("@angular/core").WritableSignal<V[]>;
|
|
13
|
+
protected get data(): V[];
|
|
14
|
+
protected set data(value: V[]);
|
|
13
15
|
protected loading: boolean;
|
|
14
16
|
protected searcher: Searcher<T>;
|
|
15
17
|
protected editor: Editor<U>;
|
|
@@ -132,12 +132,18 @@ class Searcher {
|
|
|
132
132
|
*/
|
|
133
133
|
class CrudPage {
|
|
134
134
|
constructor() {
|
|
135
|
-
this.
|
|
135
|
+
this._data = signal([]);
|
|
136
136
|
this.loading = false;
|
|
137
137
|
this.searcher = new Searcher();
|
|
138
138
|
this.editor = new Editor();
|
|
139
139
|
this.message = inject(MessageService);
|
|
140
140
|
}
|
|
141
|
+
get data() {
|
|
142
|
+
return this._data();
|
|
143
|
+
}
|
|
144
|
+
set data(value) {
|
|
145
|
+
this._data.set(value);
|
|
146
|
+
}
|
|
141
147
|
/**
|
|
142
148
|
* @deprecated 请使用 {@link Searcher.pageSize}
|
|
143
149
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solar-angular-ui-zorro-crud.mjs","sources":["../../../packages/ui-zorro/crud/editor.ts","../../../packages/ui-zorro/crud/editor-drawer/editor-drawer.component.ts","../../../packages/ui-zorro/crud/editor-drawer/editor-drawer.component.html","../../../packages/ui-zorro/crud/searcher.ts","../../../packages/ui-zorro/crud/page.ts","../../../packages/ui-zorro/crud/solar-angular-ui-zorro-crud.ts"],"sourcesContent":["import { signal } from '@angular/core';\nimport { FormArray, FormGroup } from '@angular/forms';\nimport { form } from '@fluent-form/ui-zorro';\nimport { Observable, finalize, tap } from 'rxjs';\n\nexport class Editor<T> {\n readonly visible = signal(false);\n readonly loading = signal(false);\n readonly pin = signal(false);\n readonly _model = signal<T>({} as T);\n\n get model() {\n return this._model();\n }\n set model(value: T) {\n this._model.set(value);\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n schema = form(() => { });\n form?: FormGroup;\n\n /**\n * 自动控制 loading 状态\n */\n withLoading<X>() {\n this.loading.set(true);\n return (observable: Observable<X>) => {\n return observable.pipe(\n finalize(() => this.loading.set(false))\n );\n };\n }\n\n /**\n * next 时自动重置表单 或 收起编辑器\n */\n withAttach<X>() {\n return (observable: Observable<X>) => observable.pipe(\n tap(() => this.pin() ? this.reset() : this.dismiss())\n );\n }\n\n /**\n * 呈现编辑器\n */\n present() {\n this.visible.set(true);\n }\n\n /**\n * 关闭编辑器\n */\n dismiss() {\n this.visible.set(false);\n }\n\n togglePin() {\n this.pin.update(value => !value);\n }\n\n reset() {\n // FormArray.reset 不会删除控件,只会重置值,因此需要手动清空\n for (const control of Object.values(this.form?.controls ?? {})) {\n if (control instanceof FormArray) {\n control.clear({ emitEvent: false });\n }\n }\n this.form?.reset();\n }\n\n fill(model: T) {\n this.model = model;\n }\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { NzDrawerModule } from 'ng-zorro-antd/drawer';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzSpinModule } from 'ng-zorro-antd/spin';\nimport { Editor } from '../editor';\n\n@Component({\n selector: 'sun-editor-drawer',\n imports: [\n NzDrawerModule,\n NzSpinModule,\n NzIconModule,\n ],\n templateUrl: './editor-drawer.component.html',\n styleUrl: './editor-drawer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SunEditorDrawer<T extends Record<string, any>> {\n readonly editor = input.required<Editor<T>>();\n readonly width = input<string | number>(600);\n // TODO: 有些 model 不一定有 primaryKey,可能是两个 foreignKeys,所以要考虑将 operation 变为一个函数\n // 考虑直接做到 signal 版本里,这里就变成一个 computed fn\n readonly primaryKey = input('id');\n\n readonly visibleChange = output<boolean>();\n}\n","<nz-drawer\n nzWrapClassName=\"sun-editor-drawer-wrapper\"\n [nzWidth]=\"width()\"\n [nzClosable]=\"false\"\n [nzTitle]=\"editorTitle\"\n [nzVisible]=\"editor().visible()\"\n (nzVisibleChange)=\"visibleChange.emit($event); $event || editor().reset()\"\n (nzOnClose)=\"editor().dismiss()\">\n <nz-spin *nzDrawerContent [nzSpinning]=\"editor().loading()\">\n <ng-content />\n </nz-spin>\n</nz-drawer>\n\n<ng-template #editorTitle>\n <div>{{ editor().model[primaryKey()] ? '编辑条目' : '新增条目' }}</div>\n\n <nz-icon nzType=\"pushpin\" [nzTheme]=\"editor().pin() ? 'twotone' : 'outline'\" (click)=\"editor().togglePin()\"></nz-icon>\n</ng-template>\n","import { effect, inject, InjectionToken, signal, WritableSignal } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { form } from '@fluent-form/ui-zorro';\nimport { LocalStorage } from '@solar-angular/platform-browser';\n\nexport const PAGE_SIZE = new InjectionToken<WritableSignal<number>>('', {\n providedIn: 'root',\n factory: () => {\n const key = 'page_size'\n const localStorage = inject(LocalStorage)\n const pageSize = signal(localStorage.get<number>(key) || 10);\n\n effect(() => {\n localStorage.set(key, pageSize())\n });\n\n return pageSize;\n }\n});\n\nexport class Searcher<T> {\n readonly _model = signal<Partial<T>>({});\n\n form?: FormGroup;\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n schema = form(() => { });\n\n get model() {\n return this._model();\n }\n set model(value: Partial<T>) {\n this._model.set(value);\n }\n\n readonly pageSize = inject(PAGE_SIZE);\n readonly pageNo = signal(1);\n\n reset() {\n this.pageNo.set(1);\n this.form?.reset({});\n }\n}\n","import { inject } from '@angular/core';\nimport { MessageService } from '@solar-angular/ui-zorro/message';\nimport { finalize, Observable } from 'rxjs';\nimport { Editor } from './editor';\nimport { Searcher } from './searcher';\n\n/**\n * 增删改查页面\n * @template T Searcher 的模型类型\n * @template U Editor 的模型类型,默认为 T\n * @template V Data 的模型类型,默认为 U\n */\nexport abstract class CrudPage<T, U = T, V = U> {\n protected data: V[] = [];\n\n protected loading = false;\n\n protected searcher = new Searcher<T>();\n protected editor = new Editor<U>();\n\n /**\n * @deprecated 请使用 {@link Searcher.pageSize}\n */\n protected get pageSize() {\n return this.searcher.pageSize();\n }\n /**\n * @deprecated 请使用 {@link Searcher.pageSize}\n */\n protected set pageSize(value: number) {\n this.searcher.pageSize.set(value);\n }\n /**\n * @deprecated 请使用 {@link Searcher.pageNo}\n */\n protected get pageNo() {\n return this.searcher.pageNo();\n }\n /**\n * @deprecated 请使用 {@link Searcher.pageNo}\n */\n protected set pageNo(value) {\n this.searcher.pageNo.set(value);\n }\n\n readonly message = inject(MessageService);\n\n protected withTableLoading<X>() {\n return (observable: Observable<X>) => {\n this.loading = true;\n return observable.pipe(\n finalize(() => this.loading = false)\n );\n };\n }\n\n /**\n * {@link MessageService.withLoading()} 的快捷方式\n * @param content\n */\n protected withLoading<X>(content?: string) {\n return this.message.withLoading<X>(content);\n }\n\n /**\n * {@link MessageService.withDeleteLoading()} 的快捷方式\n * @param content\n */\n protected withDeleteLoading<X>() {\n return this.message.withDeleteLoading<X>();\n }\n\n /**\n * {@link MessageService.withSaveLoading()} 的快捷方式\n * @param content\n */\n protected withSaveLoading<X>() {\n return this.message.withSaveLoading<X>();\n }\n\n /**\n * 编辑\n * @param entity\n */\n protected edit(entity: U) {\n this.editor.fill(entity);\n this.editor.present();\n }\n}\n\n/**\n * 带分页的增删改查页面\n * @template T Searcher 的模型类型\n * @template U Editor 的模型类型,默认为 T\n * @template V Data 的模型类型,默认为 U\n */\nexport abstract class PagingCrudPage<T, U = T, V = U> extends CrudPage<T, U, V> {\n protected totalSize!: number;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"solar-angular-ui-zorro-crud.mjs","sources":["../../../packages/ui-zorro/crud/editor.ts","../../../packages/ui-zorro/crud/editor-drawer/editor-drawer.component.ts","../../../packages/ui-zorro/crud/editor-drawer/editor-drawer.component.html","../../../packages/ui-zorro/crud/searcher.ts","../../../packages/ui-zorro/crud/page.ts","../../../packages/ui-zorro/crud/solar-angular-ui-zorro-crud.ts"],"sourcesContent":["import { signal } from '@angular/core';\nimport { FormArray, FormGroup } from '@angular/forms';\nimport { form } from '@fluent-form/ui-zorro';\nimport { Observable, finalize, tap } from 'rxjs';\n\nexport class Editor<T> {\n readonly visible = signal(false);\n readonly loading = signal(false);\n readonly pin = signal(false);\n readonly _model = signal<T>({} as T);\n\n get model() {\n return this._model();\n }\n set model(value: T) {\n this._model.set(value);\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n schema = form(() => { });\n form?: FormGroup;\n\n /**\n * 自动控制 loading 状态\n */\n withLoading<X>() {\n this.loading.set(true);\n return (observable: Observable<X>) => {\n return observable.pipe(\n finalize(() => this.loading.set(false))\n );\n };\n }\n\n /**\n * next 时自动重置表单 或 收起编辑器\n */\n withAttach<X>() {\n return (observable: Observable<X>) => observable.pipe(\n tap(() => this.pin() ? this.reset() : this.dismiss())\n );\n }\n\n /**\n * 呈现编辑器\n */\n present() {\n this.visible.set(true);\n }\n\n /**\n * 关闭编辑器\n */\n dismiss() {\n this.visible.set(false);\n }\n\n togglePin() {\n this.pin.update(value => !value);\n }\n\n reset() {\n // FormArray.reset 不会删除控件,只会重置值,因此需要手动清空\n for (const control of Object.values(this.form?.controls ?? {})) {\n if (control instanceof FormArray) {\n control.clear({ emitEvent: false });\n }\n }\n this.form?.reset();\n }\n\n fill(model: T) {\n this.model = model;\n }\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { NzDrawerModule } from 'ng-zorro-antd/drawer';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzSpinModule } from 'ng-zorro-antd/spin';\nimport { Editor } from '../editor';\n\n@Component({\n selector: 'sun-editor-drawer',\n imports: [\n NzDrawerModule,\n NzSpinModule,\n NzIconModule,\n ],\n templateUrl: './editor-drawer.component.html',\n styleUrl: './editor-drawer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SunEditorDrawer<T extends Record<string, any>> {\n readonly editor = input.required<Editor<T>>();\n readonly width = input<string | number>(600);\n // TODO: 有些 model 不一定有 primaryKey,可能是两个 foreignKeys,所以要考虑将 operation 变为一个函数\n // 考虑直接做到 signal 版本里,这里就变成一个 computed fn\n readonly primaryKey = input('id');\n\n readonly visibleChange = output<boolean>();\n}\n","<nz-drawer\n nzWrapClassName=\"sun-editor-drawer-wrapper\"\n [nzWidth]=\"width()\"\n [nzClosable]=\"false\"\n [nzTitle]=\"editorTitle\"\n [nzVisible]=\"editor().visible()\"\n (nzVisibleChange)=\"visibleChange.emit($event); $event || editor().reset()\"\n (nzOnClose)=\"editor().dismiss()\">\n <nz-spin *nzDrawerContent [nzSpinning]=\"editor().loading()\">\n <ng-content />\n </nz-spin>\n</nz-drawer>\n\n<ng-template #editorTitle>\n <div>{{ editor().model[primaryKey()] ? '编辑条目' : '新增条目' }}</div>\n\n <nz-icon nzType=\"pushpin\" [nzTheme]=\"editor().pin() ? 'twotone' : 'outline'\" (click)=\"editor().togglePin()\"></nz-icon>\n</ng-template>\n","import { effect, inject, InjectionToken, signal, WritableSignal } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { form } from '@fluent-form/ui-zorro';\nimport { LocalStorage } from '@solar-angular/platform-browser';\n\nexport const PAGE_SIZE = new InjectionToken<WritableSignal<number>>('', {\n providedIn: 'root',\n factory: () => {\n const key = 'page_size'\n const localStorage = inject(LocalStorage)\n const pageSize = signal(localStorage.get<number>(key) || 10);\n\n effect(() => {\n localStorage.set(key, pageSize())\n });\n\n return pageSize;\n }\n});\n\nexport class Searcher<T> {\n readonly _model = signal<Partial<T>>({});\n\n form?: FormGroup;\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n schema = form(() => { });\n\n get model() {\n return this._model();\n }\n set model(value: Partial<T>) {\n this._model.set(value);\n }\n\n readonly pageSize = inject(PAGE_SIZE);\n readonly pageNo = signal(1);\n\n reset() {\n this.pageNo.set(1);\n this.form?.reset({});\n }\n}\n","import { inject, signal } from '@angular/core';\nimport { MessageService } from '@solar-angular/ui-zorro/message';\nimport { finalize, Observable } from 'rxjs';\nimport { Editor } from './editor';\nimport { Searcher } from './searcher';\n\n/**\n * 增删改查页面\n * @template T Searcher 的模型类型\n * @template U Editor 的模型类型,默认为 T\n * @template V Data 的模型类型,默认为 U\n */\nexport abstract class CrudPage<T, U = T, V = U> {\n readonly _data = signal<V[]>([]);\n\n protected get data() {\n return this._data();\n }\n protected set data(value: V[]) {\n this._data.set(value);\n }\n\n protected loading = false;\n\n protected searcher = new Searcher<T>();\n protected editor = new Editor<U>();\n\n /**\n * @deprecated 请使用 {@link Searcher.pageSize}\n */\n protected get pageSize() {\n return this.searcher.pageSize();\n }\n /**\n * @deprecated 请使用 {@link Searcher.pageSize}\n */\n protected set pageSize(value: number) {\n this.searcher.pageSize.set(value);\n }\n /**\n * @deprecated 请使用 {@link Searcher.pageNo}\n */\n protected get pageNo() {\n return this.searcher.pageNo();\n }\n /**\n * @deprecated 请使用 {@link Searcher.pageNo}\n */\n protected set pageNo(value) {\n this.searcher.pageNo.set(value);\n }\n\n readonly message = inject(MessageService);\n\n protected withTableLoading<X>() {\n return (observable: Observable<X>) => {\n this.loading = true;\n return observable.pipe(\n finalize(() => this.loading = false)\n );\n };\n }\n\n /**\n * {@link MessageService.withLoading()} 的快捷方式\n * @param content\n */\n protected withLoading<X>(content?: string) {\n return this.message.withLoading<X>(content);\n }\n\n /**\n * {@link MessageService.withDeleteLoading()} 的快捷方式\n * @param content\n */\n protected withDeleteLoading<X>() {\n return this.message.withDeleteLoading<X>();\n }\n\n /**\n * {@link MessageService.withSaveLoading()} 的快捷方式\n * @param content\n */\n protected withSaveLoading<X>() {\n return this.message.withSaveLoading<X>();\n }\n\n /**\n * 编辑\n * @param entity\n */\n protected edit(entity: U) {\n this.editor.fill(entity);\n this.editor.present();\n }\n}\n\n/**\n * 带分页的增删改查页面\n * @template T Searcher 的模型类型\n * @template U Editor 的模型类型,默认为 T\n * @template V Data 的模型类型,默认为 U\n */\nexport abstract class PagingCrudPage<T, U = T, V = U> extends CrudPage<T, U, V> {\n protected totalSize!: number;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solar-angular/ui-zorro",
|
|
3
|
-
"version": "19.3.
|
|
3
|
+
"version": "19.3.4",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@solar-angular/core": "19.3.
|
|
10
|
-
"@solar-angular/planets": "19.3.
|
|
11
|
-
"@solar-angular/platform-browser": "19.3.
|
|
9
|
+
"@solar-angular/core": "19.3.4",
|
|
10
|
+
"@solar-angular/planets": "19.3.4",
|
|
11
|
+
"@solar-angular/platform-browser": "19.3.4",
|
|
12
12
|
"tslib": "^2.3.0"
|
|
13
13
|
},
|
|
14
14
|
"peerDependencies": {
|