mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-05-08 23:19:26 +08:00
* fix: add license code * fix: bug * fix: bug * fix: upgrade * fix: improve * chore: add copyright information to the file header * fix: d.ts bug * fix: bug * fix: e2e bug * fix: merge main --------- Co-authored-by: chenos <chenlinxh@gmail.com>
46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
/**
|
|
* This file is part of the NocoBase (R) project.
|
|
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
* Authors: NocoBase Team.
|
|
*
|
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
*/
|
|
|
|
import { BaseValueParser } from './base-value-parser';
|
|
|
|
export class StringValueParser extends BaseValueParser {
|
|
async setValue(value: any) {
|
|
const { map, set } = this.getOptions();
|
|
if (set.size > 0) {
|
|
if (map.has(value)) {
|
|
value = map.get(value);
|
|
}
|
|
if (set.has(value)) {
|
|
this.value = value;
|
|
} else {
|
|
this.errors.push(`No matching option found - ${JSON.stringify(value)}`);
|
|
}
|
|
} else {
|
|
this.value = value;
|
|
}
|
|
}
|
|
|
|
getOptions() {
|
|
const options = this.field.options?.['uiSchema']?.enum || [];
|
|
const map = new Map();
|
|
const set = new Set();
|
|
for (const option of options) {
|
|
if (typeof option === 'string') {
|
|
set.add(option);
|
|
map.set(option, option);
|
|
} else {
|
|
set.add(option.value);
|
|
set.add(option.label);
|
|
map.set(option.label, option.value);
|
|
}
|
|
}
|
|
return { map, set };
|
|
}
|
|
}
|