@gridsheet/react-core 1.4.0-alpha.13 → 1.4.0-alpha.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@ export declare const defaultTimeDeltaFormat = "HH:mm:ss";
2
2
  export declare const BASE_DATE: Date;
3
3
  type Diff = [number, number, number, number, number, number, number];
4
4
  export declare class TimeDelta {
5
- __type: string;
5
+ gsType: string;
6
6
  protected diff: Diff;
7
7
  private date1;
8
8
  private date2;
package/dist/lib/time.js CHANGED
@@ -10,7 +10,7 @@ const SUB_FNS = UNITS.map(
10
10
  );
11
11
  class TimeDelta {
12
12
  constructor(date1, date2, format = defaultTimeDeltaFormat) {
13
- this.__type = "TimeDelta";
13
+ this.gsType = "TimeDelta";
14
14
  this.diff = [0, 0, 0, 0, 0, 0, 0];
15
15
  this.diff = [
16
16
  date1.getFullYear() - date2.getFullYear(),
@@ -77,7 +77,7 @@ class TimeDelta {
77
77
  if (obj instanceof TimeDelta) {
78
78
  return true;
79
79
  }
80
- if ((obj == null ? void 0 : obj.__type) === "TimeDelta") {
80
+ if ((obj == null ? void 0 : obj.gsType) === "TimeDelta") {
81
81
  return true;
82
82
  }
83
83
  return false;
@@ -86,7 +86,7 @@ class TimeDelta {
86
86
  if (obj instanceof TimeDelta) {
87
87
  return obj;
88
88
  }
89
- if ((obj == null ? void 0 : obj.__type) === "TimeDelta") {
89
+ if ((obj == null ? void 0 : obj.gsType) === "TimeDelta") {
90
90
  return TimeDelta.fromObject(obj);
91
91
  }
92
92
  return TimeDelta.create();
@@ -1 +1 @@
1
- {"version":3,"file":"time.js","sources":["../../lib/time.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\nexport const defaultTimeDeltaFormat = 'HH:mm:ss';\n\nexport const BASE_DATE = new Date('2345-01-02T03:04:05Z');\ntype DiffFunction = (date: Date | number, amount: number) => Date;\nconst UNITS = ['year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond'] as const;\nconst ADD_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).add(amount, unit).toDate(),\n) as DiffFunction[];\nconst SUB_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).subtract(amount, unit).toDate(),\n) as DiffFunction[];\n\ntype Diff = [number, number, number, number, number, number, number];\n\nexport class TimeDelta {\n public __type = 'TimeDelta';\n protected diff: Diff = [0, 0, 0, 0, 0, 0, 0];\n private date1: Date;\n private date2: Date;\n public format: string;\n\n constructor(date1: Date, date2: Date, format = defaultTimeDeltaFormat) {\n this.diff = [\n date1.getFullYear() - date2.getFullYear(),\n date1.getMonth() - date2.getMonth(),\n date1.getDate() - date2.getDate(),\n date1.getHours() - date2.getHours(),\n date1.getMinutes() - date2.getMinutes(),\n date1.getSeconds() - date2.getSeconds(),\n date1.getMilliseconds() - date2.getMilliseconds(),\n ];\n this.date1 = date1;\n this.date2 = date2;\n this.format = format;\n }\n public add(date: Date) {\n this.diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return date;\n }\n public sub(date: Date) {\n this.diff.forEach((n, i) => {\n date = SUB_FNS[i](date, n);\n });\n return date;\n }\n\n public stringify(format?: string) {\n if (format == null) {\n format = this.format;\n }\n const tokens = [];\n const msecs = this.date1.getMilliseconds() - this.date2.getMilliseconds();\n let secs = (this.date1.getTime() - this.date2.getTime()) / 1000;\n for (const divider of [3600, 60]) {\n tokens.push(Math.floor(secs / divider));\n secs %= divider;\n }\n tokens.push(secs, msecs);\n let result = format;\n result = result.replace('HH', String(tokens[0]).padStart(2, '0'));\n result = result.replace('H', String(tokens[0]));\n result = result.replace('mm', String(tokens[1]).padStart(2, '0'));\n result = result.replace('ss', String(tokens[2]).padStart(2, '0'));\n result = result.replace('SSS', String(tokens[3]).padStart(3, '0'));\n result = result.replace('SS', String(tokens[3]).padStart(2, '0').substring(0, 2));\n result = result.replace('S', String(tokens[3]).padStart(1, '0').substring(0, 1));\n return result;\n }\n\n public toJSON() {\n return this.stringify();\n }\n\n public toString() {\n return this.stringify();\n }\n\n static create(hours = 0, minutes = 0, seconds = 0, milliseconds = 0) {\n const diff: Diff = [0, 0, 0, hours, minutes, seconds, milliseconds];\n let date = BASE_DATE;\n diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return new TimeDelta(date, BASE_DATE);\n }\n\n static is(obj: any): boolean {\n if (obj instanceof TimeDelta) {\n return true;\n }\n if (obj?.__type === 'TimeDelta') {\n return true;\n }\n return false;\n }\n\n static ensure(obj: any) {\n if (obj instanceof TimeDelta) {\n return obj;\n }\n if (obj?.__type === 'TimeDelta') {\n return TimeDelta.fromObject(obj);\n }\n return TimeDelta.create();\n }\n static fromObject(obj: any) {\n return new TimeDelta(new Date(obj.date1), new Date(obj.date2));\n }\n static parse(value: string, format = defaultTimeDeltaFormat, strict = false): TimeDelta | undefined {\n {\n const formattedMatcher = dayjsFormatToNamedRegex(format);\n const match = value.match(formattedMatcher);\n if (match?.groups) {\n return TimeDelta.create(\n Number(match.groups.HH || match.groups.H || 0),\n Number(match.groups.mm || match.groups.m || 0),\n Number(match.groups.ss || match.groups.s || 0),\n Number(match.groups.SSS || match.groups.SS || match.groups.S || 0),\n );\n }\n }\n if (strict) {\n return;\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(sign * Number(hours), sign * Number(minutes));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes, seconds] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(sign * Number(hours), sign * Number(minutes), sign * Number(seconds));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})\\.(\\d+)$/);\n if (match) {\n const [, _sign, hours, minutes, seconds, msecs] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(\n sign * Number(hours),\n sign * Number(minutes),\n sign * Number(seconds),\n sign * Number(msecs),\n );\n }\n }\n }\n}\n\nconst tokenRegexMap: Record<string, { group: string; pattern: string }> = {\n HH: { group: 'HH', pattern: '(?<HH>\\\\d+)' },\n H: { group: 'H', pattern: '(?<HH>\\\\d+)' },\n mm: { group: 'mm', pattern: '(?<mm>[0-5]\\\\d)' },\n m: { group: 'm', pattern: '(?<m>\\\\d|[1-5]\\\\d)' },\n ss: { group: 'ss', pattern: '(?<ss>[0-5]\\\\d)' },\n s: { group: 's', pattern: '(?<s>\\\\d|[1-5]\\\\d)' },\n SSS: { group: 'SSS', pattern: '(?<SSS>\\\\d{3})' },\n SS: { group: 'SS', pattern: '(?<SS>\\\\d{2})' },\n S: { group: 'S', pattern: '(?<S>\\\\d)' },\n};\n\nfunction dayjsFormatToNamedRegex(format: string): RegExp {\n const sortedTokens = Object.keys(tokenRegexMap).sort((a, b) => b.length - a.length);\n const tokenPattern = new RegExp(sortedTokens.join('|'), 'g');\n\n const escapedFormat = format.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n const regexSource = escapedFormat.replace(tokenPattern, (match) => {\n return tokenRegexMap[match]?.pattern ?? match;\n });\n\n return new RegExp(`^${regexSource}$`);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"time.js","sources":["../../lib/time.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\nexport const defaultTimeDeltaFormat = 'HH:mm:ss';\n\nexport const BASE_DATE = new Date('2345-01-02T03:04:05Z');\ntype DiffFunction = (date: Date | number, amount: number) => Date;\nconst UNITS = ['year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond'] as const;\nconst ADD_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).add(amount, unit).toDate(),\n) as DiffFunction[];\nconst SUB_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).subtract(amount, unit).toDate(),\n) as DiffFunction[];\n\ntype Diff = [number, number, number, number, number, number, number];\n\nexport class TimeDelta {\n public gsType = 'TimeDelta';\n protected diff: Diff = [0, 0, 0, 0, 0, 0, 0];\n private date1: Date;\n private date2: Date;\n public format: string;\n\n constructor(date1: Date, date2: Date, format = defaultTimeDeltaFormat) {\n this.diff = [\n date1.getFullYear() - date2.getFullYear(),\n date1.getMonth() - date2.getMonth(),\n date1.getDate() - date2.getDate(),\n date1.getHours() - date2.getHours(),\n date1.getMinutes() - date2.getMinutes(),\n date1.getSeconds() - date2.getSeconds(),\n date1.getMilliseconds() - date2.getMilliseconds(),\n ];\n this.date1 = date1;\n this.date2 = date2;\n this.format = format;\n }\n public add(date: Date) {\n this.diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return date;\n }\n public sub(date: Date) {\n this.diff.forEach((n, i) => {\n date = SUB_FNS[i](date, n);\n });\n return date;\n }\n\n public stringify(format?: string) {\n if (format == null) {\n format = this.format;\n }\n const tokens = [];\n const msecs = this.date1.getMilliseconds() - this.date2.getMilliseconds();\n let secs = (this.date1.getTime() - this.date2.getTime()) / 1000;\n for (const divider of [3600, 60]) {\n tokens.push(Math.floor(secs / divider));\n secs %= divider;\n }\n tokens.push(secs, msecs);\n let result = format;\n result = result.replace('HH', String(tokens[0]).padStart(2, '0'));\n result = result.replace('H', String(tokens[0]));\n result = result.replace('mm', String(tokens[1]).padStart(2, '0'));\n result = result.replace('ss', String(tokens[2]).padStart(2, '0'));\n result = result.replace('SSS', String(tokens[3]).padStart(3, '0'));\n result = result.replace('SS', String(tokens[3]).padStart(2, '0').substring(0, 2));\n result = result.replace('S', String(tokens[3]).padStart(1, '0').substring(0, 1));\n return result;\n }\n\n public toJSON() {\n return this.stringify();\n }\n\n public toString() {\n return this.stringify();\n }\n\n static create(hours = 0, minutes = 0, seconds = 0, milliseconds = 0) {\n const diff: Diff = [0, 0, 0, hours, minutes, seconds, milliseconds];\n let date = BASE_DATE;\n diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return new TimeDelta(date, BASE_DATE);\n }\n\n static is(obj: any): boolean {\n if (obj instanceof TimeDelta) {\n return true;\n }\n if (obj?.gsType === 'TimeDelta') {\n return true;\n }\n return false;\n }\n\n static ensure(obj: any) {\n if (obj instanceof TimeDelta) {\n return obj;\n }\n if (obj?.gsType === 'TimeDelta') {\n return TimeDelta.fromObject(obj);\n }\n return TimeDelta.create();\n }\n static fromObject(obj: any) {\n return new TimeDelta(new Date(obj.date1), new Date(obj.date2));\n }\n static parse(value: string, format = defaultTimeDeltaFormat, strict = false): TimeDelta | undefined {\n {\n const formattedMatcher = dayjsFormatToNamedRegex(format);\n const match = value.match(formattedMatcher);\n if (match?.groups) {\n return TimeDelta.create(\n Number(match.groups.HH || match.groups.H || 0),\n Number(match.groups.mm || match.groups.m || 0),\n Number(match.groups.ss || match.groups.s || 0),\n Number(match.groups.SSS || match.groups.SS || match.groups.S || 0),\n );\n }\n }\n if (strict) {\n return;\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(sign * Number(hours), sign * Number(minutes));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes, seconds] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(sign * Number(hours), sign * Number(minutes), sign * Number(seconds));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})\\.(\\d+)$/);\n if (match) {\n const [, _sign, hours, minutes, seconds, msecs] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(\n sign * Number(hours),\n sign * Number(minutes),\n sign * Number(seconds),\n sign * Number(msecs),\n );\n }\n }\n }\n}\n\nconst tokenRegexMap: Record<string, { group: string; pattern: string }> = {\n HH: { group: 'HH', pattern: '(?<HH>\\\\d+)' },\n H: { group: 'H', pattern: '(?<HH>\\\\d+)' },\n mm: { group: 'mm', pattern: '(?<mm>[0-5]\\\\d)' },\n m: { group: 'm', pattern: '(?<m>\\\\d|[1-5]\\\\d)' },\n ss: { group: 'ss', pattern: '(?<ss>[0-5]\\\\d)' },\n s: { group: 's', pattern: '(?<s>\\\\d|[1-5]\\\\d)' },\n SSS: { group: 'SSS', pattern: '(?<SSS>\\\\d{3})' },\n SS: { group: 'SS', pattern: '(?<SS>\\\\d{2})' },\n S: { group: 'S', pattern: '(?<S>\\\\d)' },\n};\n\nfunction dayjsFormatToNamedRegex(format: string): RegExp {\n const sortedTokens = Object.keys(tokenRegexMap).sort((a, b) => b.length - a.length);\n const tokenPattern = new RegExp(sortedTokens.join('|'), 'g');\n\n const escapedFormat = format.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n const regexSource = escapedFormat.replace(tokenPattern, (match) => {\n return tokenRegexMap[match]?.pattern ?? match;\n });\n\n return new RegExp(`^${regexSource}$`);\n}\n"],"names":[],"mappings":"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"}
@@ -78,8 +78,8 @@ class Renderer {
78
78
  if (value instanceof Date) {
79
79
  return this.date(value);
80
80
  }
81
- if (value instanceof TimeDelta) {
82
- return this.timedelta(value);
81
+ if (TimeDelta.is(value)) {
82
+ return this.timedelta(TimeDelta.ensure(value));
83
83
  }
84
84
  if (value == null) {
85
85
  return "";
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sources":["../../renderers/core.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\nimport { CellType, PointType, WriterType } from '../types';\nimport { Table, UserTable } from '../lib/table';\nimport { solveFormula } from '../formula/solver';\nimport { FormulaError } from '../formula/evaluator';\nimport { p2a } from '../lib/converters';\nimport { TimeDelta } from '../lib/time';\n\ntype Condition = (value: any) => boolean;\n\ntype Stringify = (value: any) => string;\n\ntype Props = {\n condition?: Condition;\n complement?: Stringify;\n mixins?: RendererMixinType[];\n};\n\nexport interface RendererMixinType {\n datetimeFormat?: string;\n dateFormat?: string;\n timeDeltaFormat?: string;\n\n render?(value: any, table: UserTable, writer?: WriterType, position?: PointType): any;\n stringify?(cell: CellType): string;\n string?(value: string, table: UserTable, writer?: WriterType, position?: PointType): any;\n bool?(value: boolean, writer?: WriterType, position?: PointType): any;\n number?(value: number, writer?: WriterType, position?: PointType): any;\n date?(value: Date, writer?: WriterType, position?: PointType): any;\n timedelta?(value: TimeDelta, writer?: WriterType, position?: PointType): any;\n array?(value: any[], writer?: WriterType, position?: PointType): any;\n object?(value: any, writer?: WriterType, position?: PointType): any;\n null?(value: null, writer?: WriterType, position?: PointType): any;\n undefined?(value: undefined, writer?: WriterType, position?: PointType): any;\n}\n\nexport class Renderer implements RendererMixinType {\n public datetimeFormat: string = 'YYYY-MM-DD HH:mm:ss';\n public dateFormat: string = 'YYYY-MM-DD';\n public timeDeltaFormat: string = 'HH:mm:ss';\n private condition?: Condition;\n private complement?: Stringify;\n\n constructor(props?: Props) {\n this.applyMixins(props?.mixins);\n if (props == null) {\n return;\n }\n const { condition, complement } = props;\n this.condition = condition;\n this.complement = complement;\n }\n\n private applyMixins(mixins?: RendererMixinType[]) {\n if (mixins == null) {\n return;\n }\n for (const mixin of mixins) {\n for (const key in mixin) {\n // @ts-expect-error mixin has the same fields as this\n this[key] = mixin[key];\n }\n }\n }\n\n public call(table: Table, point: PointType, writer?: WriterType): any {\n const address = p2a(point);\n const cache = table.getSolvedCache(address);\n const value = cache || table.getByPoint(point)?.value;\n return this.render(value, table, writer, point);\n }\n\n public render(value: any, table: Table, writer?: WriterType, position?: PointType): any {\n if (this.condition && !this.condition(value)) {\n return this.complement ? this.complement(value) : this.stringify({ value });\n }\n\n switch (typeof value) {\n case 'object':\n if (value instanceof Date) {\n return this.date(value, writer, position);\n }\n if (TimeDelta.is(value)) {\n return this.timedelta(TimeDelta.ensure(value), writer, position);\n }\n if (value == null) {\n return this.null(value, writer, position);\n }\n if (value instanceof Table) {\n return this.render(value.getByPoint({ y: value.top, x: value.left })?.value, table, writer, position);\n }\n if (Array.isArray(value)) {\n return this.array(value, writer, position);\n }\n if (value instanceof FormulaError) {\n throw value;\n }\n return this.object(value, writer, position);\n case 'string':\n return this.string(value, table, writer, position);\n case 'number':\n return this.number(value, writer, position);\n case 'boolean':\n return this.bool(value, writer, position);\n case 'undefined':\n return this.undefined(value, writer, position);\n case 'function':\n return value() as string;\n }\n return '';\n }\n\n stringify(cell: CellType, position?: PointType): string {\n const { value } = cell;\n if (value instanceof Date) {\n return this.date(value);\n }\n if (value instanceof TimeDelta) {\n return this.timedelta(value);\n }\n if (value == null) {\n return '';\n }\n\n return value.toString();\n }\n\n string(value: string, table: Table, writer?: WriterType, position?: PointType): any {\n if (value[0] === \"'\") {\n return value.substring(1);\n }\n if (value[0] === '=') {\n const result = solveFormula({ value, table, raise: true, origin: position });\n if (result === null) {\n return this.null(null);\n }\n if (result === undefined) {\n return this.undefined(undefined);\n }\n if (result.constructor.name === 'Boolean') {\n return String(result).toUpperCase();\n }\n if (result.constructor.name === 'Date') {\n return this.date(result as Date);\n }\n return this.render(result, table, writer);\n }\n return value;\n }\n\n bool(value: boolean, writer?: WriterType, position?: PointType): any {\n return value ? 'TRUE' : 'FALSE';\n }\n\n number(value: number, writer?: WriterType, position?: PointType): any {\n if (isNaN(value)) {\n return 'NaN';\n }\n return value;\n }\n\n date(value: Date, writer?: WriterType, position?: PointType): any {\n if (value.getHours() + value.getMinutes() + value.getSeconds() === 0) {\n return dayjs(value).format(this.dateFormat);\n }\n return dayjs(value).format(this.datetimeFormat);\n }\n\n timedelta(value: TimeDelta, writer?: WriterType, position?: PointType): any {\n return value.stringify(this.timeDeltaFormat);\n }\n\n array(value: any[], writer?: WriterType, position?: PointType): any {\n return value.map((v) => this.stringify({ value: v })).join(',');\n }\n\n object(value: any, writer?: WriterType, position?: PointType): any {\n return JSON.stringify(value);\n }\n\n null(value: any, writer?: WriterType, position?: PointType): any {\n return '';\n }\n\n undefined(value: undefined, writer?: WriterType, position?: PointType): any {\n return '';\n }\n}\n\nexport type RendererType = Renderer;\nexport const defaultRenderer = new Renderer();\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sources":["../../renderers/core.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\nimport { CellType, PointType, WriterType } from '../types';\nimport { Table, UserTable } from '../lib/table';\nimport { solveFormula } from '../formula/solver';\nimport { FormulaError } from '../formula/evaluator';\nimport { p2a } from '../lib/converters';\nimport { TimeDelta } from '../lib/time';\n\ntype Condition = (value: any) => boolean;\n\ntype Stringify = (value: any) => string;\n\ntype Props = {\n condition?: Condition;\n complement?: Stringify;\n mixins?: RendererMixinType[];\n};\n\nexport interface RendererMixinType {\n datetimeFormat?: string;\n dateFormat?: string;\n timeDeltaFormat?: string;\n\n render?(value: any, table: UserTable, writer?: WriterType, position?: PointType): any;\n stringify?(cell: CellType): string;\n string?(value: string, table: UserTable, writer?: WriterType, position?: PointType): any;\n bool?(value: boolean, writer?: WriterType, position?: PointType): any;\n number?(value: number, writer?: WriterType, position?: PointType): any;\n date?(value: Date, writer?: WriterType, position?: PointType): any;\n timedelta?(value: TimeDelta, writer?: WriterType, position?: PointType): any;\n array?(value: any[], writer?: WriterType, position?: PointType): any;\n object?(value: any, writer?: WriterType, position?: PointType): any;\n null?(value: null, writer?: WriterType, position?: PointType): any;\n undefined?(value: undefined, writer?: WriterType, position?: PointType): any;\n}\n\nexport class Renderer implements RendererMixinType {\n public datetimeFormat: string = 'YYYY-MM-DD HH:mm:ss';\n public dateFormat: string = 'YYYY-MM-DD';\n public timeDeltaFormat: string = 'HH:mm:ss';\n private condition?: Condition;\n private complement?: Stringify;\n\n constructor(props?: Props) {\n this.applyMixins(props?.mixins);\n if (props == null) {\n return;\n }\n const { condition, complement } = props;\n this.condition = condition;\n this.complement = complement;\n }\n\n private applyMixins(mixins?: RendererMixinType[]) {\n if (mixins == null) {\n return;\n }\n for (const mixin of mixins) {\n for (const key in mixin) {\n // @ts-expect-error mixin has the same fields as this\n this[key] = mixin[key];\n }\n }\n }\n\n public call(table: Table, point: PointType, writer?: WriterType): any {\n const address = p2a(point);\n const cache = table.getSolvedCache(address);\n const value = cache || table.getByPoint(point)?.value;\n return this.render(value, table, writer, point);\n }\n\n public render(value: any, table: Table, writer?: WriterType, position?: PointType): any {\n if (this.condition && !this.condition(value)) {\n return this.complement ? this.complement(value) : this.stringify({ value });\n }\n\n switch (typeof value) {\n case 'object':\n if (value instanceof Date) {\n return this.date(value, writer, position);\n }\n if (TimeDelta.is(value)) {\n return this.timedelta(TimeDelta.ensure(value), writer, position);\n }\n if (value == null) {\n return this.null(value, writer, position);\n }\n if (value instanceof Table) {\n return this.render(value.getByPoint({ y: value.top, x: value.left })?.value, table, writer, position);\n }\n if (Array.isArray(value)) {\n return this.array(value, writer, position);\n }\n if (value instanceof FormulaError) {\n throw value;\n }\n return this.object(value, writer, position);\n case 'string':\n return this.string(value, table, writer, position);\n case 'number':\n return this.number(value, writer, position);\n case 'boolean':\n return this.bool(value, writer, position);\n case 'undefined':\n return this.undefined(value, writer, position);\n case 'function':\n return value() as string;\n }\n return '';\n }\n\n stringify(cell: CellType, position?: PointType): string {\n const { value } = cell;\n if (value instanceof Date) {\n return this.date(value);\n }\n if (TimeDelta.is(value)) {\n return this.timedelta(TimeDelta.ensure(value));\n }\n if (value == null) {\n return '';\n }\n\n return value.toString();\n }\n\n string(value: string, table: Table, writer?: WriterType, position?: PointType): any {\n if (value[0] === \"'\") {\n return value.substring(1);\n }\n if (value[0] === '=') {\n const result = solveFormula({ value, table, raise: true, origin: position });\n if (result === null) {\n return this.null(null);\n }\n if (result === undefined) {\n return this.undefined(undefined);\n }\n if (result.constructor.name === 'Boolean') {\n return String(result).toUpperCase();\n }\n if (result.constructor.name === 'Date') {\n return this.date(result as Date);\n }\n return this.render(result, table, writer);\n }\n return value;\n }\n\n bool(value: boolean, writer?: WriterType, position?: PointType): any {\n return value ? 'TRUE' : 'FALSE';\n }\n\n number(value: number, writer?: WriterType, position?: PointType): any {\n if (isNaN(value)) {\n return 'NaN';\n }\n return value;\n }\n\n date(value: Date, writer?: WriterType, position?: PointType): any {\n if (value.getHours() + value.getMinutes() + value.getSeconds() === 0) {\n return dayjs(value).format(this.dateFormat);\n }\n return dayjs(value).format(this.datetimeFormat);\n }\n\n timedelta(value: TimeDelta, writer?: WriterType, position?: PointType): any {\n return value.stringify(this.timeDeltaFormat);\n }\n\n array(value: any[], writer?: WriterType, position?: PointType): any {\n return value.map((v) => this.stringify({ value: v })).join(',');\n }\n\n object(value: any, writer?: WriterType, position?: PointType): any {\n return JSON.stringify(value);\n }\n\n null(value: any, writer?: WriterType, position?: PointType): any {\n return '';\n }\n\n undefined(value: undefined, writer?: WriterType, position?: PointType): any {\n return '';\n }\n}\n\nexport type RendererType = Renderer;\nexport const defaultRenderer = new Renderer();\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gridsheet/react-core",
3
- "version": "1.4.0-alpha.13",
3
+ "version": "1.4.0-alpha.15",
4
4
  "description": "Spreadsheet component for React",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",