#

autocomplete

// src/app/piying/page/component/extension/picker-ref/example/autocomplete/content.ts
import * as v from 'valibot';
import { actions } from '@piying/view-angular-core';
import { safeDefine } from '@@piying-define';
import { filter } from 'rxjs';
import { PickerRefService } from '@piying-lib/angular-daisyui/extension';
export const TriggerButton = v.pipe(
  v.string(),
  safeDefine.setComponent('input', (actions) => {
    return [];
  }),
);
export const ContentButton = v.pipe(
  v.string(),
  safeDefine.setComponent('option-list', (actions) => {
    return [
      actions.inputs.patch({
        options: ['option-1', 'option-2', 'option-3'],
      }),
      actions.hooks.merge({
        allFieldsResolved: (field) => {
          const options = field.inputs()['options'] as string[];
          const service = field.injector.get(PickerRefService);
          const triggerField = service.triggerField$$();
          const allowCustom = true;
          triggerField.form
            .control!.valueChanges.pipe(filter((a) => typeof a === 'string'))
            .subscribe((value) => {
              field.inputs.update((data) => {
                return {
                  ...data,
                  options: !value ? options : options.filter((item) => item.includes(value)),
                };
              });
              if (allowCustom) {
                const rootField$$ = service.rootField$$();
                rootField$$.form.control!.updateValue(value);
              }
            });
        },
      }),
    ];
  }),
  actions.class.bottom('bg-white rounded-box shadow'),
);

export default v.pipe(
  v.tuple([
    v.pipe(
      v.string(),
      safeDefine.setComponent('picker-ref', (actions) => {
        return [
          actions.inputs.patch({
            trigger: TriggerButton,
            content: ContentButton,
            overlayConfig: { positionStrategy: undefined },
          }),
        ];
      }),
      actions.hooks.merge({
        allFieldsResolved: (field) => {
          field.form.control!.valueChanges.subscribe((item) => {
            console.log('值变更', item);
          });
        },
      }),
    ),
  ]),
  actions.wrappers.patch(['div']),
  actions.class.top('flex gap-4'),
);
content_copy
#

changeClose

// src/app/piying/page/component/extension/picker-ref/example/changeClose/content.ts
import * as v from 'valibot';
import { actions, NFCSchema } from '@piying/view-angular-core';
import { computed } from '@angular/core';
import { safeDefine } from '@@piying-define';
export default v.pipe(
  v.tuple([
    v.pipe(
      v.date(),
      safeDefine.setComponent('picker-ref', (actions) => {
        return [
          actions.inputs.patch({
            changeClose: true,
            trigger: v.pipe(
              NFCSchema,
              safeDefine.setComponent('button', (actions) => {
                return [
                  actions.inputs.patchAsync({
                    content: (field) => {
                      return computed(() => {
                        const pickerValue = field.context['pickerValue']();
                        return pickerValue ? `${pickerValue}` : 'default';
                      });
                    },
                  }),
                ];
              }),
            ),
            content: v.pipe(
              v.date(),
              safeDefine.setComponent('calendar', (actions) => {
                return [
                  actions.attributes.patch({
                    class: 'bg-base-200 rounded-xl shadow-2xs',
                  }),
                ];
              }),
            ),
          }),
        ];
      }),
    ),
  ]),
  actions.wrappers.patch(['div']),
  actions.class.top('flex gap-4'),
);
content_copy
#

base

// src/app/piying/page/component/extension/picker-ref/example/base/content.ts
import * as v from 'valibot';
import { actions, NFCSchema } from '@piying/view-angular-core';
import { safeDefine } from '@@piying-define';
export const TriggerButton = v.pipe(
  NFCSchema,
  safeDefine.setComponent('button', (actions) => {
    return [actions.inputs.patch({ content: '点击选择' })];
  }),
);
export const ContentButton = v.pipe(
  NFCSchema,
  safeDefine.setComponent('button', (actions) => {
    return [
      actions.inputs.patch({ content: '内容' }),
      actions.inputs.patchAsync({
        clicked: (field) => {
          return () => {
            field.context['close']();
          };
        },
      }),
    ];
  }),
);

export default v.pipe(
  v.tuple([
    v.pipe(
      NFCSchema,
      safeDefine.setComponent('picker-ref', (actions) => {
        return [
          actions.inputs.patch({
            trigger: TriggerButton,
            content: ContentButton,
            overlayConfig: { positionStrategy: undefined },
          }),
        ];
      }),
    ),
  ]),
  actions.wrappers.patch(['div']),
  actions.class.top('flex gap-4'),
);
content_copy