| 索引 | badge | ||||
|---|---|---|---|---|---|
| 1 | data1 | ||||
| 2 | data2 | ||||
| 3 | data3 | ||||
// src/app/piying/page/component/extension/table/example/base/content.ts
import * as v from 'valibot';
import { actions, hideWhen, NFCSchema, setAlias } from '@piying/view-angular-core';
import { safeDefine } from '@@piying-define';
import {
CheckboxService,
SortService,
TableExpandService,
tableInputDefine,
TableResourceService,
} from '@piying-lib/angular-daisyui/extension';
import { computed } from '@angular/core';
import { map, startWith } from 'rxjs';
export default v.pipe(
v.tuple([
v.pipe(
v.object({
table: v.pipe(
NFCSchema,
actions.providers.patch([CheckboxService, TableExpandService, SortService]),
actions.hooks.merge({
allFieldsResolved: (field) => {
const sort = field.injector.get(SortService);
sort.sortList.set(['title1', 'badge1']);
sort.setInitValue({
badge1: 1,
});
sort.value$$.subscribe((value) => {
field.injector.get(TableResourceService).setParams('sort', value);
});
field.injector.get(CheckboxService).init();
field.injector.get(TableExpandService).init({ _multiple: true });
},
}),
safeDefine.setComponent('table', (actions) => {
return [
actions.inputs.patchAsync({
define: (field) => {
const pageFiled = field.get(['..', 'page']);
return tableInputDefine({
expand: {
head: ' ',
body: v.pipe(
NFCSchema,
safeDefine.setComponent('table-expand-cell', (actions) => {
return [actions.wrappers.set(['td'])];
}),
),
},
checkbox: {
head: v.pipe(
v.boolean(),
safeDefine.setComponent('checkbox', (actions) => {
return [actions.wrappers.set(['td', 'table-checkbox-all'])];
}),
),
body: v.pipe(
v.boolean(),
safeDefine.setComponent('checkbox', (actions) => {
return [actions.wrappers.set(['td', 'table-checkbox-body'])];
}),
),
},
index: {
head: '索引',
body: (node: any, index: number) => {
const { pageQueryParams } = pageFiled!.props();
return `${index + 1 + pageQueryParams.index * pageQueryParams.size}`;
},
},
'0': {
head: '测试',
body: (data: any) => {
return data.title1;
},
},
'1': {
head: 'badge',
body: v.pipe(
NFCSchema,
safeDefine.setComponent('badge', (actions) => {
return [
actions.wrappers.set(['td']),
actions.inputs.patchAsync({
content: ({ context }) => {
return computed(() => context.item$().badge1);
},
}),
];
}),
),
},
'2': {
head: v.pipe(
NFCSchema,
safeDefine.setComponent('button', (actions) => {
return [
actions.inputs.patch({ content: '1234' }),
actions.wrappers.set(['td', 'sort-header']),
actions.props.patch({
key: 'title1',
}),
];
}),
),
},
'3': {
head: v.pipe(
NFCSchema,
safeDefine.setComponent('button', (actions) => {
return [
actions.inputs.patch({ content: '666' }),
actions.wrappers.set(['td', 'sort-header']),
actions.props.patch({
key: 'badge1',
}),
];
}),
),
},
extra: {
body: v.pipe(
NFCSchema,
safeDefine.setComponent('button', (actions) => {
return [
actions.wrappers.set(['td']),
hideWhen({
listen(fn, field) {
const sm = field.injector.get(TableExpandService).selectionModel$$;
return sm.pipe(
map((value) => {
return !value.isSelected(field.context.item$());
}),
startWith(true),
);
},
}),
];
}),
),
},
})(() => {
return {
head: [{ columns: ['expand', 'checkbox', 'index', '1', '2', '3'] }],
body: [
{
define: v.pipe(v.tuple([]), safeDefine.setComponent('tr')),
columns: ['expand', 'checkbox', 'index', '1'],
},
{
define: v.pipe(v.tuple([]), safeDefine.setComponent('tr')),
columns: ['extra'],
},
],
};
});
},
data: (field) => {
return field.injector.get(TableResourceService).list$$;
},
}),
];
}),
),
page: v.pipe(
NFCSchema,
safeDefine.setComponent('pagination', (actions) => {
return [
actions.inputs.patch({
value: {
size: 2,
index: 0,
},
}),
actions.inputs.patchAsync({
count: (field) => {
return field.injector.get(TableResourceService).count$$;
},
}),
];
}),
actions.outputs.patchAsync({
valueChange: (field) => {
return (data) => {
field.injector.get(TableResourceService).setParams('page', data);
};
},
}),
),
}),
setAlias('table-page'),
actions.wrappers.set([{ type: 'loading-wrapper' }]),
actions.props.patchAsync({
isLoading: (field) => field.injector.get(TableResourceService).isLoading$$,
}),
actions.providers.patch([TableResourceService]),
actions.hooks.merge({
allFieldsResolved: (field) => {
field.injector.get(TableResourceService).setRequest(async (inputs, needUpdate) => {
await new Promise<void>((res) => {
setTimeout(() => {
res();
}, 1000);
});
return [
3,
[
{
title1: '测试内容1',
badge1: 'data1',
},
{
title1: '测试内容2',
badge1: 'data2',
},
{
title1: '测试内容3',
badge1: 'data3',
},
],
];
});
},
}),
),
]),
actions.wrappers.patch(['div']),
actions.class.top('flex gap-4'),
);
| k1 |
|---|
| k1v0 |
| k1v1 |
| k1v2 |
| k1v3 |
| k2 |
| k2v0 |
| k2v1 |
| k2v2 |
| k2v3 |
| k3 |
| k3v0 |
| k3v1 |
| k3v2 |
| k3v3 |
| k4 |
| k4v0 |
| k4v1 |
| k4v2 |
| k4v3 |
| k5 |
| k5v0 |
| k5v1 |
| k5v2 |
| k5v3 |
| k6 |
| k6v0 |
| k6v1 |
| k6v2 |
| k6v3 |
| k7 |
| k7v0 |
| k7v1 |
| k7v2 |
| k7v3 |
| k8 |
| k8v0 |
| k8v1 |
| k8v2 |
| k8v3 |
| k9 |
| k9v0 |
| k9v1 |
| k9v2 |
| k9v3 |
| k10 |
| k10v0 |
| k10v1 |
| k10v2 |
| k10v3 |
| k11 |
| k11v0 |
| k11v1 |
| k11v2 |
| k11v3 |
| k12 |
| k12v0 |
| k12v1 |
| k12v2 |
| k12v3 |
| k13 |
| k13v0 |
| k13v1 |
| k13v2 |
| k13v3 |
| k14 |
| k14v0 |
| k14v1 |
| k14v2 |
| k14v3 |
| k15 |
| k15v0 |
| k15v1 |
| k15v2 |
| k15v3 |
| k16 |
| k16v0 |
| k16v1 |
| k16v2 |
| k16v3 |
| k17 |
| k17v0 |
| k17v1 |
| k17v2 |
| k17v3 |
| k18 |
| k18v0 |
| k18v1 |
| k18v2 |
| k18v3 |
| k19 |
| k19v0 |
| k19v1 |
| k19v2 |
| k19v3 |
| k20 |
| k20v0 |
| k20v1 |
| k20v2 |
| k20v3 |
| k21 |
| k21v0 |
| k21v1 |
| k21v2 |
| k21v3 |
| k22 |
| k22v0 |
| k22v1 |
| k22v2 |
| k22v3 |
| k23 |
| k23v0 |
| k23v1 |
| k23v2 |
| k23v3 |
| k24 |
| k24v0 |
| k24v1 |
| k24v2 |
| k24v3 |
| k25 |
| k25v0 |
| k25v1 |
| k25v2 |
| k25v3 |
| k26 |
| k26v0 |
| k26v1 |
| k26v2 |
| k26v3 |
| k27 |
| k27v0 |
| k27v1 |
| k27v2 |
| k27v3 |
| k28 |
| k28v0 |
| k28v1 |
| k28v2 |
| k28v3 |
| k29 |
| k29v0 |
| k29v1 |
| k29v2 |
| k29v3 |
| k30 |
| k30v0 |
| k30v1 |
| k30v2 |
| k30v3 |
| k31 |
| k31v0 |
| k31v1 |
| k31v2 |
| k31v3 |
| k32 |
| k32v0 |
| k32v1 |
| k32v2 |
| k32v3 |
| k33 |
| k33v0 |
| k33v1 |
| k33v2 |
| k33v3 |
| k34 |
| k34v0 |
| k34v1 |
| k34v2 |
| k34v3 |
| k35 |
| k35v0 |
| k35v1 |
| k35v2 |
| k35v3 |
| k36 |
| k36v0 |
| k36v1 |
| k36v2 |
| k36v3 |
| k37 |
| k37v0 |
| k37v1 |
| k37v2 |
| k37v3 |
| k38 |
| k38v0 |
| k38v1 |
| k38v2 |
| k38v3 |
| k39 |
| k39v0 |
| k39v1 |
| k39v2 |
| k39v3 |
| k40 |
| k40v0 |
| k40v1 |
| k40v2 |
| k40v3 |
| k41 |
| k41v0 |
| k41v1 |
| k41v2 |
| k41v3 |
| k42 |
| k42v0 |
| k42v1 |
| k42v2 |
| k42v3 |
| k43 |
| k43v0 |
| k43v1 |
| k43v2 |
| k43v3 |
| k44 |
| k44v0 |
| k44v1 |
| k44v2 |
| k44v3 |
| k45 |
| k45v0 |
| k45v1 |
| k45v2 |
| k45v3 |
| k46 |
| k46v0 |
| k46v1 |
| k46v2 |
| k46v3 |
| k47 |
| k47v0 |
| k47v1 |
| k47v2 |
| k47v3 |
| k48 |
| k48v0 |
| k48v1 |
| k48v2 |
| k48v3 |
| k49 |
| k49v0 |
| k49v1 |
| k49v2 |
| k49v3 |
| k50 |
| k50v0 |
| k50v1 |
| k50v2 |
| k50v3 |
| k51 |
| k51v0 |
| k51v1 |
| k51v2 |
| k51v3 |
| k52 |
| k52v0 |
| k52v1 |
| k52v2 |
| k52v3 |
| k53 |
| k53v0 |
| k53v1 |
| k53v2 |
| k53v3 |
| k54 |
| k54v0 |
| k54v1 |
| k54v2 |
| k54v3 |
| k55 |
| k55v0 |
| k55v1 |
| k55v2 |
| k55v3 |
| k56 |
| k56v0 |
| k56v1 |
| k56v2 |
| k56v3 |
| k57 |
| k57v0 |
| k57v1 |
| k57v2 |
| k57v3 |
| k58 |
| k58v0 |
| k58v1 |
| k58v2 |
| k58v3 |
| k59 |
| k59v0 |
| k59v1 |
| k59v2 |
| k59v3 |
| k60 |
| k60v0 |
| k60v1 |
| k60v2 |
| k60v3 |
| k61 |
| k61v0 |
| k61v1 |
| k61v2 |
| k61v3 |
| k62 |
| k62v0 |
| k62v1 |
| k62v2 |
| k62v3 |
| k63 |
| k63v0 |
| k63v1 |
| k63v2 |
| k63v3 |
| k64 |
| k64v0 |
| k64v1 |
| k64v2 |
| k64v3 |
| k65 |
| k65v0 |
| k65v1 |
| k65v2 |
| k65v3 |
| k66 |
| k66v0 |
| k66v1 |
| k66v2 |
| k66v3 |
| k67 |
| k67v0 |
| k67v1 |
| k67v2 |
| k67v3 |
| k68 |
| k68v0 |
| k68v1 |
| k68v2 |
| k68v3 |
| k69 |
| k69v0 |
| k69v1 |
| k69v2 |
| k69v3 |
| k70 |
| k70v0 |
| k70v1 |
| k70v2 |
| k70v3 |
| k71 |
| k71v0 |
| k71v1 |
| k71v2 |
| k71v3 |
| k72 |
| k72v0 |
| k72v1 |
| k72v2 |
| k72v3 |
| k73 |
| k73v0 |
| k73v1 |
| k73v2 |
| k73v3 |
| k74 |
| k74v0 |
| k74v1 |
| k74v2 |
| k74v3 |
| k75 |
| k75v0 |
| k75v1 |
| k75v2 |
| k75v3 |
| k76 |
| k76v0 |
| k76v1 |
| k76v2 |
| k76v3 |
| k77 |
| k77v0 |
| k77v1 |
| k77v2 |
| k77v3 |
| k78 |
| k78v0 |
| k78v1 |
| k78v2 |
| k78v3 |
| k79 |
| k79v0 |
| k79v1 |
| k79v2 |
| k79v3 |
| k80 |
| k80v0 |
| k80v1 |
| k80v2 |
| k80v3 |
| k81 |
| k81v0 |
| k81v1 |
| k81v2 |
| k81v3 |
| k82 |
| k82v0 |
| k82v1 |
| k82v2 |
| k82v3 |
| k83 |
| k83v0 |
| k83v1 |
| k83v2 |
| k83v3 |
| k84 |
| k84v0 |
| k84v1 |
| k84v2 |
| k84v3 |
| k85 |
| k85v0 |
| k85v1 |
| k85v2 |
| k85v3 |
| k86 |
| k86v0 |
| k86v1 |
| k86v2 |
| k86v3 |
| k87 |
| k87v0 |
| k87v1 |
| k87v2 |
| k87v3 |
| k88 |
| k88v0 |
| k88v1 |
| k88v2 |
| k88v3 |
| k89 |
| k89v0 |
| k89v1 |
| k89v2 |
| k89v3 |
| k90 |
| k90v0 |
| k90v1 |
| k90v2 |
| k90v3 |
| k91 |
| k91v0 |
| k91v1 |
| k91v2 |
| k91v3 |
| k92 |
| k92v0 |
| k92v1 |
| k92v2 |
| k92v3 |
| k93 |
| k93v0 |
| k93v1 |
| k93v2 |
| k93v3 |
| k94 |
| k94v0 |
| k94v1 |
| k94v2 |
| k94v3 |
| k95 |
| k95v0 |
| k95v1 |
| k95v2 |
| k95v3 |
| k96 |
| k96v0 |
| k96v1 |
| k96v2 |
| k96v3 |
| k97 |
| k97v0 |
| k97v1 |
| k97v2 |
| k97v3 |
| k98 |
| k98v0 |
| k98v1 |
| k98v2 |
| k98v3 |
| k99 |
| k99v0 |
| k99v1 |
| k99v2 |
| k99v3 |
// src/app/piying/page/component/extension/table/example/category/content.ts
import * as v from 'valibot';
import { hideWhen, NFCSchema } from '@piying/view-angular-core';
import { safeDefine } from '@@piying-define';
import { actions as DActions } from '@piying/view-angular';
import {
ExpandRowDirective,
TableExpandService,
TableResourceService,
} from '@piying-lib/angular-daisyui/extension';
import { map, startWith } from 'rxjs';
import { range } from 'es-toolkit';
export default v.object({
table: v.pipe(
NFCSchema,
safeDefine.setComponent('table', (actions) => {
return [
actions.inputs.patch({ type: 'category', pin: { rows: true } }),
actions.inputs.patchAsync({
define: (field) => {
return {
row: {
head: [{ columns: ['0'] }],
body: [
{
columns: ['0'],
},
{
columns: ['extra'],
define: v.pipe(
v.tuple([]),
safeDefine.setComponent('tr', (actions) => {
return [
DActions.directives.set([
{
type: ExpandRowDirective,
},
]),
hideWhen({
listen(fn, field) {
const sm = field.injector.get(TableExpandService).selectionModel$$;
return sm.pipe(
map((value) => value.isSelected(field.context.item$())),
startWith(true),
);
},
}),
];
}),
),
},
],
},
columns: {
'0': {
head: (data: any) => {
return data;
},
body: (node: any, index: number) => {
return node;
},
},
extra: {
head: (data: any) => {
return data;
},
body: (node: any, index: number) => {
return `extra-${node}`;
},
},
},
};
},
}),
actions.inputs.patchAsync({
data: (field) => {
return field.injector.get(TableResourceService).list$$;
},
}),
actions.class.component('h-100'),
actions.providers.patch([TableExpandService, TableResourceService]),
actions.hooks.merge({
allFieldsResolved: (field) => {
field.injector.get(TableExpandService).init();
field.injector.get(TableResourceService).setRequest(() => {
const list = range(1, 100).map((index) => {
return [`k${index}`, range(4).map((i) => `k${index}v${i}`)];
});
return [list.length, list];
});
},
}),
];
}),
),
});
| k1-title | k2-title | |
|---|---|---|
| k1-title | k2-title | |
|---|---|---|
// src/app/piying/page/component/extension/table/example/form/content.ts
import * as v from 'valibot';
import { actions } from '@piying/view-angular-core';
import { safeDefine } from '@@piying-define';
import { computed } from '@angular/core';
export default v.pipe(
v.tuple([
v.pipe(
v.object({
table: v.pipe(
v.array(
v.object({
k1: v.pipe(v.string(), v.title('k1-title'), actions.wrappers.set(['td'])),
k2: v.pipe(v.number(), v.title('k2-title'), actions.wrappers.set(['td'])),
}),
),
safeDefine.setComponent('table-group', (actions) => {
return [
actions.inputs.patch({ zebra: true, range: [0, 2], disableAdd: false }),
actions.class.component('rounded-box border border-base-content/5 bg-base-100'),
];
}),
actions.hooks.merge({
allFieldsResolved: (field) => {
setTimeout(() => {
field.form.control!.updateValue([
{ k1: '11', k2: 66 },
{ k1: '22', k2: 77 },
{ k1: '33', k2: 88 },
{ k1: '44', k2: 99 },
]);
}, 0);
},
}),
),
page: safeDefine.nfcComponent('pagination', (actions) => {
return [
actions.class.top('mt-4 flex justify-end'),
actions.inputs.patch({
value: {
size: 2,
index: 0,
},
}),
actions.inputs.patchAsync({
count: (field) => {
const tableField = field.get(['..', 'table'])!;
return computed(() => {
return tableField.children!().length;
});
},
}),
actions.outputs.patchAsync({
valueChange: (field) => {
return (data) => {
const control = field.get(['..', 'table'])!;
const start = data.index * data.size;
control.inputs.update((inputs) => {
return {
...inputs,
range: [start, start + data.size],
};
});
};
},
}),
];
}),
}),
actions.wrappers.patch(['div']),
),
v.pipe(
v.object({
table: v.pipe(
v.array(
v.object({
k1: v.pipe(v.string(), v.title('k1-title'), actions.wrappers.set(['td'])),
k2: v.pipe(v.number(), v.title('k2-title'), actions.wrappers.set(['td'])),
}),
),
safeDefine.setComponent('table-group', (actions) => {
return [
actions.inputs.patch({ zebra: true }),
actions.class.component('rounded-box border border-base-content/5 bg-base-100'),
];
}),
actions.hooks.merge({
allFieldsResolved: (field) => {
setTimeout(() => {
field.form.control!.updateValue([
{ k1: '11', k2: 66 },
{ k1: '22', k2: 77 },
{ k1: '33', k2: 88 },
{ k1: '44', k2: 99 },
]);
}, 0);
},
}),
),
}),
actions.wrappers.patch(['div']),
),
]),
actions.wrappers.patch(['div']),
actions.class.top('grid gap-4'),
);