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; 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; // 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>; // undefined means all export function getLeftAvailableJoinType(right?: OneOf | '') { if (right === undefined) { return Object.keys(availableLeftJoinType) as FieldType[]; } return right ? availableRightJoinType[right.type] : []; }