From 2dcfab57b73e0ddbaa8851cb2e36d51ec9245845 Mon Sep 17 00:00:00 2001 From: yacchin1205 <968739+yacchin1205@users.noreply.github.com> Date: Fri, 27 Feb 2026 07:12:56 +0900 Subject: [PATCH 1/7] Add FileSelector/ExportTarget components and generalize WEKO item display --- .../flowable-form/export-target/component.ts | 55 ++++++++++++ .../flowable-form/export-target/template.hbs | 20 +++++ .../flowable-form/field/component.ts | 25 +++++- .../flowable-form/field/template.hbs | 14 ++++ .../flowable-form/file-selector/component.ts | 84 +++++++++++++++++++ .../flowable-form/file-selector/template.hbs | 12 +++ .../-components/flowable-form/utils.ts | 14 ++++ app/utils/weko-item.ts | 40 +++++++++ .../draft-registration-card/component.ts | 34 ++++---- .../draft-registration-card/template.hbs | 9 +- .../draft/-components/register/component.ts | 22 ++--- .../draft/-components/register/template.hbs | 2 +- translations/en-us.yml | 11 ++- translations/ja.yml | 11 ++- 14 files changed, 315 insertions(+), 38 deletions(-) create mode 100644 app/guid-node/workflow/-components/flowable-form/export-target/component.ts create mode 100644 app/guid-node/workflow/-components/flowable-form/export-target/template.hbs create mode 100644 app/guid-node/workflow/-components/flowable-form/file-selector/component.ts create mode 100644 app/guid-node/workflow/-components/flowable-form/file-selector/template.hbs create mode 100644 app/utils/weko-item.ts diff --git a/app/guid-node/workflow/-components/flowable-form/export-target/component.ts b/app/guid-node/workflow/-components/flowable-form/export-target/component.ts new file mode 100644 index 000000000..487085353 --- /dev/null +++ b/app/guid-node/workflow/-components/flowable-form/export-target/component.ts @@ -0,0 +1,55 @@ +import { action } from '@ember/object'; +import Component from '@glimmer/component'; +import { tracked } from '@glimmer/tracking'; +import { task } from 'ember-concurrency-decorators'; + +import FileProviderModel from 'ember-osf-web/models/file-provider'; +import Node from 'ember-osf-web/models/node'; + +import { FieldValueWithType } from '../types'; + +interface ExportTargetArgs { + node: Node; + value: FieldValueWithType | undefined; + onChange: (valueWithType: FieldValueWithType) => void; + disabled: boolean; +} + +export default class ExportTarget extends Component { + @tracked providers: FileProviderModel[] = []; + @tracked selectedProvider: string = ''; + + @task + loadProviders = task(function *(this: ExportTarget) { + const providers: FileProviderModel[] = (yield this.args.node.loadAll('files')).toArray(); + this.providers = providers; + + // Restore from value or pick default + if (this.args.value && this.args.value.type === 'string' && this.args.value.value) { + this.selectedProvider = this.args.value.value as string; + } else if (providers.length > 0) { + const osf = providers.find(p => p.name === 'osfstorage'); + this.selectedProvider = osf ? osf.name : providers[0].name; + this.notifyChange(this.selectedProvider); + } + }); + + @action + initialize() { + this.loadProviders.perform(); + } + + @action + destinationChanged(event: Event) { + const value = (event.target as HTMLSelectElement).value; + this.selectedProvider = value; + this.notifyChange(value); + } + + private notifyChange(providerName: string): void { + this.args.onChange({ + value: providerName, + type: 'string', + }); + } +} diff --git a/app/guid-node/workflow/-components/flowable-form/export-target/template.hbs b/app/guid-node/workflow/-components/flowable-form/export-target/template.hbs new file mode 100644 index 000000000..f030e5467 --- /dev/null +++ b/app/guid-node/workflow/-components/flowable-form/export-target/template.hbs @@ -0,0 +1,20 @@ +
+ {{#if this.loadProviders.isRunning}} +
+ + {{t 'workflow.console.tasks.dialog.exportTarget.loading'}} +
+ {{else}} + + {{/if}} +
diff --git a/app/guid-node/workflow/-components/flowable-form/field/component.ts b/app/guid-node/workflow/-components/flowable-form/field/component.ts index 2e39bb331..f0f41c2e7 100644 --- a/app/guid-node/workflow/-components/flowable-form/field/component.ts +++ b/app/guid-node/workflow/-components/flowable-form/field/component.ts @@ -6,7 +6,7 @@ import { WorkflowVariable } from '../../../types'; import { parseProgressSteps, ProgressStep } from '../../progress-sidebar/utils'; import { resolveFlowableType } from '../component'; import { FieldValueWithType, WorkflowTaskField, WorkflowTaskFieldOption } from '../types'; -import { extractFileMetadata, extractProjectMetadata } from '../utils'; +import { extractExportTarget, extractFileMetadata, extractFileSelector, extractProjectMetadata } from '../utils'; function getOptionValue(option: WorkflowTaskFieldOption): string | undefined { return (option.id !== undefined && option.id !== null) ? option.id : option.name; @@ -118,6 +118,18 @@ export default class TaskFormField extends Component { this.args.onChange(this.args.field.id, valueWithType); } + @action + handleFileSelectorChange(valueWithType: FieldValueWithType): void { + this.updatedValue = valueWithType; + this.args.onChange(this.args.field.id, valueWithType); + } + + @action + handleExportTargetChange(valueWithType: FieldValueWithType): void { + this.updatedValue = valueWithType; + this.args.onChange(this.args.field.id, valueWithType); + } + get displayValue(): unknown { return this.updatedValue !== null ? this.updatedValue.value : this.currentValue; } @@ -201,9 +213,20 @@ export default class TaskFormField extends Component { if (this.isProjectMetadataSelector) { return false; } + if (this.isFileSelector || this.isExportTarget) { + return false; + } return this.type === 'multi-line-text' || this.type === 'textarea'; } + get isFileSelector(): boolean { + return extractFileSelector(this.args.field); + } + + get isExportTarget(): boolean { + return extractExportTarget(this.args.field); + } + get projectMetadataPlaceholder() { return extractProjectMetadata(this.args.field); } diff --git a/app/guid-node/workflow/-components/flowable-form/field/template.hbs b/app/guid-node/workflow/-components/flowable-form/field/template.hbs index bce990322..1813f6b58 100644 --- a/app/guid-node/workflow/-components/flowable-form/field/template.hbs +++ b/app/guid-node/workflow/-components/flowable-form/field/template.hbs @@ -129,6 +129,20 @@ @onChange={{this.handleFileMetadataSelection}} @disabled={{this.isReadOnly}} /> + {{else if this.isFileSelector}} + + {{else if this.isExportTarget}} + {{else if this.isTextarea}}