59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
import { isType, type FieldType, type OneOf } from './kintone-rest-api-client';
|
|
|
|
type CalcType = 'NUMBER' | 'NUMBER_DIGIT' | 'DATETIME' | 'DATE' | 'TIME' | 'HOUR_MINUTE' | 'DAY_HOUR_MINUTE';
|
|
export type LeftCalcJoinType = Record<CalcType, FieldType[]>;
|
|
|
|
export function isForceDisable(field: OneOf) {
|
|
if (isType.CALC(field)) {
|
|
return field.format === 'DAY_HOUR_MINUTE' || field.format === 'HOUR_MINUTE';
|
|
}
|
|
return false;
|
|
}
|
|
|
|
const calcJoinType = {
|
|
NUMBER: ['SINGLE_LINE_TEXT', 'NUMBER'],
|
|
NUMBER_DIGIT: ['SINGLE_LINE_TEXT', 'NUMBER'],
|
|
DATE: ['DATE'],
|
|
TIME: ['TIME'],
|
|
DATETIME: ['DATETIME'],
|
|
HOUR_MINUTE: [],
|
|
DAY_HOUR_MINUTE: [],
|
|
} as LeftCalcJoinType;
|
|
|
|
const availableLeftJoinType = {
|
|
SINGLE_LINE_TEXT: ['SINGLE_LINE_TEXT'],
|
|
NUMBER: ['NUMBER'],
|
|
CALC: calcJoinType,
|
|
DATE: ['DATE'],
|
|
TIME: ['TIME'],
|
|
DATETIME: ['DATETIME'],
|
|
LINK: ['LINK'],
|
|
} as Record<FieldType, FieldType[] | LeftCalcJoinType>;
|
|
|
|
// undefined means all
|
|
export function getRightAvailableJoinType(left?: OneOf | '') {
|
|
if (left === undefined) {
|
|
return Object.keys(availableRightJoinType) as FieldType[];
|
|
}
|
|
return left ? availableLeftJoinType[left.type] : [];
|
|
}
|
|
|
|
export type RightCalcJoinType = { type: 'CALC'; format: CalcType[] };
|
|
|
|
const availableRightJoinType = {
|
|
SINGLE_LINE_TEXT: ['SINGLE_LINE_TEXT', { type: 'CALC', format: ['NUMBER', 'NUMBER_DIGIT'] }],
|
|
NUMBER: ['NUMBER', { type: 'CALC', format: ['NUMBER', 'NUMBER_DIGIT'] }],
|
|
DATE: ['DATE', { type: 'CALC', format: ['DATE'] }],
|
|
TIME: ['TIME', { type: 'CALC', format: ['TIME'] }],
|
|
DATETIME: ['DATETIME', { type: 'CALC', format: ['DATETIME'] }],
|
|
LINK: ['LINK'],
|
|
} as Record<FieldType, Array<FieldType | RightCalcJoinType>>;
|
|
|
|
// undefined means all
|
|
export function getLeftAvailableJoinType(right?: OneOf | '') {
|
|
if (right === undefined) {
|
|
return Object.keys(availableLeftJoinType) as FieldType[];
|
|
}
|
|
return right ? availableRightJoinType[right.type] : [];
|
|
}
|