@airtable/blocks 0.0.0-experimental-446b49015-20251008 → 0.0.0-experimental-28533a19d-20251016
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.
- package/dist/esm/interface/models/base.js +16 -1
- package/dist/esm/interface/ui/use_custom_properties.js +63 -16
- package/dist/esm/shared/sdk_core.js +1 -1
- package/dist/types/src/base/ui/cell_renderer.d.ts +22 -3
- package/dist/types/src/base/ui/cell_renderer.d.ts.map +1 -1
- package/dist/types/src/interface/models/base.d.ts.map +1 -1
- package/dist/types/src/interface/types/airtable_interface.d.ts +2 -3
- package/dist/types/src/interface/types/airtable_interface.d.ts.map +1 -1
- package/dist/types/src/interface/types/base.d.ts +16 -0
- package/dist/types/src/interface/types/base.d.ts.map +1 -1
- package/dist/types/src/interface/ui/cell_renderer.d.ts +22 -3
- package/dist/types/src/interface/ui/cell_renderer.d.ts.map +1 -1
- package/dist/types/src/interface/ui/use_custom_properties.d.ts +12 -5
- package/dist/types/src/interface/ui/use_custom_properties.d.ts.map +1 -1
- package/dist/types/src/shared/types/airtable_interface_core.d.ts +1 -1
- package/dist/types/src/shared/types/airtable_interface_core.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BaseCore } from '../../shared/models/base_core';
|
|
1
|
+
import { BaseCore, WatchableBaseKeys } from '../../shared/models/base_core';
|
|
2
2
|
import { Table } from './table';
|
|
3
3
|
import { RecordStore } from './record_store';
|
|
4
4
|
|
|
@@ -21,4 +21,19 @@ export class Base extends BaseCore {
|
|
|
21
21
|
_constructRecordStore(sdk, tableId) {
|
|
22
22
|
return new RecordStore(sdk, tableId);
|
|
23
23
|
}
|
|
24
|
+
|
|
25
|
+
/** @internal */
|
|
26
|
+
_getAllTableDataForEditModeConfiguration() {
|
|
27
|
+
return this._data.allTableDataForEditModeConfiguration;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** @internal */
|
|
31
|
+
__triggerOnChangeForChangedPaths(changedPaths) {
|
|
32
|
+
super.__triggerOnChangeForChangedPaths(changedPaths);
|
|
33
|
+
|
|
34
|
+
// Trigger schema change when allTableDataForEditModeConfiguration changes
|
|
35
|
+
if (changedPaths.allTableDataForEditModeConfiguration) {
|
|
36
|
+
this._onChange(WatchableBaseKeys.schema);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
24
39
|
}
|
|
@@ -26,7 +26,7 @@ import { spawnUnknownSwitchCaseError } from '../../shared/error_utils';
|
|
|
26
26
|
* | {
|
|
27
27
|
* type: 'field';
|
|
28
28
|
* table: Table;
|
|
29
|
-
*
|
|
29
|
+
* shouldFieldBeAllowed?: (field: {id: FieldId; config: FieldConfig}) => boolean; // If not provided, all fields in the table will be shown in the dropdown.
|
|
30
30
|
* defaultValue?: Field;
|
|
31
31
|
* }
|
|
32
32
|
* | {
|
|
@@ -55,11 +55,11 @@ import { spawnUnknownSwitchCaseError } from '../../shared/error_utils';
|
|
|
55
55
|
*
|
|
56
56
|
* function getCustomProperties(base: Base) {
|
|
57
57
|
* const table = base.tables[0];
|
|
58
|
-
* const
|
|
58
|
+
* const isNumberField = (field: {id: FieldId, config: FieldConfig}) => field.config.type === FieldType.NUMBER;
|
|
59
59
|
* return [
|
|
60
60
|
* {key: 'title', label: 'Title', type: 'string', defaultValue: 'Chart'},
|
|
61
|
-
* {key: 'xAxis', label: 'X-axis', type: 'field', table,
|
|
62
|
-
* {key: 'yAxis', label: 'Y-axis', type: 'field', table,
|
|
61
|
+
* {key: 'xAxis', label: 'X-axis', type: 'field', table, shouldFieldBeAllowed: isNumberField},
|
|
62
|
+
* {key: 'yAxis', label: 'Y-axis', type: 'field', table, shouldFieldBeAllowed: isNumberField},
|
|
63
63
|
* {key: 'color', label: 'Color', type: 'enum', possibleValues: [{value: 'red', label: 'Red'}, {value: 'blue', label: 'Blue'}, {value: 'green', label: 'Green'}], defaultValue: 'red'},
|
|
64
64
|
* {key: 'showLegend', label: 'Show Legend', type: 'boolean', defaultValue: true},
|
|
65
65
|
* ];
|
|
@@ -99,7 +99,7 @@ export function useCustomProperties(getCustomProperties) {
|
|
|
99
99
|
if (hasError) {
|
|
100
100
|
return;
|
|
101
101
|
}
|
|
102
|
-
const customPropertiesForAirtableInterface = customProperties.map(convertBlockPageElementCustomPropertyToBlockInstallationPageElementCustomPropertyForAirtableInterface);
|
|
102
|
+
const customPropertiesForAirtableInterface = customProperties.map(customProperty => convertBlockPageElementCustomPropertyToBlockInstallationPageElementCustomPropertyForAirtableInterface(sdk.base._getAllTableDataForEditModeConfiguration(), (fieldData, fieldNamesById) => sdk.__airtableInterface.fieldTypeProvider.getConfig(sdk.__appInterface, fieldData, fieldNamesById), customProperty));
|
|
103
103
|
sdk.setCustomPropertiesAsync(customPropertiesForAirtableInterface).catch(error => {
|
|
104
104
|
setErrorState({
|
|
105
105
|
error
|
|
@@ -114,7 +114,7 @@ export function useCustomProperties(getCustomProperties) {
|
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
/** @internal */
|
|
117
|
-
function convertBlockPageElementCustomPropertyToBlockInstallationPageElementCustomPropertyForAirtableInterface(property) {
|
|
117
|
+
function convertBlockPageElementCustomPropertyToBlockInstallationPageElementCustomPropertyForAirtableInterface(allTableDataForEditModeConfiguration, getFieldConfig, property) {
|
|
118
118
|
switch (property.type) {
|
|
119
119
|
case 'boolean':
|
|
120
120
|
return {
|
|
@@ -139,14 +139,43 @@ function convertBlockPageElementCustomPropertyToBlockInstallationPageElementCust
|
|
|
139
139
|
defaultValue: property.defaultValue
|
|
140
140
|
};
|
|
141
141
|
case 'field':
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
142
|
+
{
|
|
143
|
+
let possibleValues;
|
|
144
|
+
if (!allTableDataForEditModeConfiguration) {
|
|
145
|
+
// When not in edit mode, we don't have the full table schema to properly compute
|
|
146
|
+
// which fields are "possible" (allowed) for this custom property. But that's ok since
|
|
147
|
+
// Hyperbase only uses the possibleValues to render the custom properties inspector,
|
|
148
|
+
// so it's only relevant when in edit mode.
|
|
149
|
+
possibleValues = undefined;
|
|
150
|
+
} else if (property.possibleValues) {
|
|
151
|
+
possibleValues = property.possibleValues.map(field => field.id);
|
|
152
|
+
} else if (property.shouldFieldBeAllowed) {
|
|
153
|
+
const shouldFieldBeAllowed = property.shouldFieldBeAllowed;
|
|
154
|
+
const tableData = allTableDataForEditModeConfiguration[property.table.id];
|
|
155
|
+
if (!tableData) {
|
|
156
|
+
possibleValues = [];
|
|
157
|
+
} else {
|
|
158
|
+
const fieldNamesById = Object.fromEntries(Object.entries(tableData.fieldsById).map(_ref => {
|
|
159
|
+
let [id, field] = _ref;
|
|
160
|
+
return [id, field.name];
|
|
161
|
+
}));
|
|
162
|
+
possibleValues = Object.values(tableData.fieldsById).filter(field => shouldFieldBeAllowed({
|
|
163
|
+
id: field.id,
|
|
164
|
+
config: getFieldConfig(field, fieldNamesById)
|
|
165
|
+
})).map(field => field.id);
|
|
166
|
+
}
|
|
167
|
+
} else {
|
|
168
|
+
possibleValues = undefined;
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
key: property.key,
|
|
172
|
+
label: property.label,
|
|
173
|
+
type: BlockInstallationPageElementCustomPropertyTypeForAirtableInterface.FIELD_ID,
|
|
174
|
+
tableId: property.table.id,
|
|
175
|
+
possibleValues,
|
|
176
|
+
defaultValue: property.defaultValue?.id
|
|
177
|
+
};
|
|
178
|
+
}
|
|
150
179
|
case 'table':
|
|
151
180
|
return {
|
|
152
181
|
key: property.key,
|
|
@@ -189,8 +218,26 @@ function getCustomPropertyValue(base, globalConfig, property) {
|
|
|
189
218
|
{
|
|
190
219
|
if (typeof rawValue === 'string' && property.table === base.getTableById(property.table.id)) {
|
|
191
220
|
const fieldModel = property.table.fields.find(field => field.id === rawValue);
|
|
192
|
-
if (fieldModel
|
|
193
|
-
|
|
221
|
+
if (fieldModel) {
|
|
222
|
+
if (property.possibleValues) {
|
|
223
|
+
if (property.possibleValues.includes(fieldModel)) {
|
|
224
|
+
return fieldModel;
|
|
225
|
+
}
|
|
226
|
+
return defaultValue;
|
|
227
|
+
} else if (property.shouldFieldBeAllowed) {
|
|
228
|
+
if (property.shouldFieldBeAllowed({
|
|
229
|
+
id: fieldModel.id,
|
|
230
|
+
config: {
|
|
231
|
+
type: fieldModel.type,
|
|
232
|
+
options: fieldModel.options
|
|
233
|
+
}
|
|
234
|
+
})) {
|
|
235
|
+
return fieldModel;
|
|
236
|
+
}
|
|
237
|
+
return defaultValue;
|
|
238
|
+
} else {
|
|
239
|
+
return fieldModel;
|
|
240
|
+
}
|
|
194
241
|
}
|
|
195
242
|
}
|
|
196
243
|
return defaultValue;
|
|
@@ -1,13 +1,32 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import type Record from '../models/record';
|
|
3
|
+
import type Field from '../models/field';
|
|
4
4
|
/**
|
|
5
5
|
* Props for the {@link CellRenderer} component.
|
|
6
6
|
*
|
|
7
7
|
* @docsPath UI/components/CellRenderer
|
|
8
8
|
* @noInheritDoc
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
interface CellRendererProps {
|
|
11
|
+
/** The {@link Record} from which to render a cell. Either `record` or `cellValue` must be provided to the CellRenderer. If both are provided, `record` will be used. */
|
|
12
|
+
record?: Record | null | undefined;
|
|
13
|
+
/** The cell value to render. Either `record` or `cellValue` must be provided to the CellRenderer. If both are provided, `record` will be used. */
|
|
14
|
+
cellValue?: unknown;
|
|
15
|
+
/** The {@link Field} for a given {@link Record} being rendered as a cell. */
|
|
16
|
+
field: Field;
|
|
17
|
+
/** Whether to wrap cell contents. Defaults to true. */
|
|
18
|
+
shouldWrap?: boolean;
|
|
19
|
+
/** Additional class names to apply to the cell renderer container, separated by spaces. */
|
|
20
|
+
className?: string;
|
|
21
|
+
/** Additional styles to apply to the cell renderer container. */
|
|
22
|
+
style?: React.CSSProperties;
|
|
23
|
+
/** Additional class names to apply to the cell itself, separated by spaces. */
|
|
24
|
+
cellClassName?: string;
|
|
25
|
+
/** Additional styles to apply to the cell itself. */
|
|
26
|
+
cellStyle?: React.CSSProperties;
|
|
27
|
+
/** Render function if provided and validation fails. */
|
|
28
|
+
renderInvalidCellValue?: (cellValue: unknown, field: Field) => React.ReactElement;
|
|
29
|
+
}
|
|
11
30
|
/**
|
|
12
31
|
* Displays the contents of a cell given a field and record.
|
|
13
32
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell_renderer.d.ts","sourceRoot":"","sources":["../../../../../src/base/ui/cell_renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"cell_renderer.d.ts","sourceRoot":"","sources":["../../../../../src/base/ui/cell_renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAC;AAEzC;;;;;GAKG;AACH,UAAU,iBAAiB;IACvB,wKAAwK;IACxK,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnC,kJAAkJ;IAClJ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,KAAK,EAAE,KAAK,CAAC;IACb,uDAAuD;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAG5B,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAChC,wDAAwD;IACxD,sBAAsB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,YAAY,CAAC;CACrF;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,KAAK,EAAE,iBAAiB,qBAE5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/interface/models/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/interface/models/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAA8C,MAAM,+BAA+B,CAAC;AACpG,OAAO,EAAC,KAAK,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAOrD;;;;;;;GAOG;AACH,qBAAa,IAAK,SAAQ,QAAQ,CAAC,gBAAgB,CAAC;CA0BnD"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { type AirtableInterfaceCore, type SdkInitDataCore } from '../../shared/types/airtable_interface_core';
|
|
2
2
|
import { type InterfaceSdkMode } from '../../sdk_mode';
|
|
3
|
-
import { type BaseDataCore } from '../../shared/types/base_core';
|
|
4
3
|
import { type TableId, type PageId, type FieldId, type RecordId } from '../../shared/types/hyper_ids';
|
|
5
|
-
import { type
|
|
4
|
+
import { type BaseData } from './base';
|
|
6
5
|
/** @hidden */
|
|
7
6
|
export declare enum BlockRunContextType {
|
|
8
7
|
PAGE_ELEMENT_IN_QUERY_CONTAINER = "pageElementInQueryContainer"
|
|
@@ -18,7 +17,7 @@ export type BlockRunContext = PageElementInQueryContainerBlockRunContextType;
|
|
|
18
17
|
/** @hidden */
|
|
19
18
|
export interface SdkInitData extends SdkInitDataCore {
|
|
20
19
|
runContext: BlockRunContext;
|
|
21
|
-
baseData:
|
|
20
|
+
baseData: BaseData;
|
|
22
21
|
}
|
|
23
22
|
/** @hidden */
|
|
24
23
|
export interface IdGenerator {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"airtable_interface.d.ts","sourceRoot":"","sources":["../../../../../src/interface/types/airtable_interface.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACvB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAC,KAAK,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"airtable_interface.d.ts","sourceRoot":"","sources":["../../../../../src/interface/types/airtable_interface.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACvB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAC,KAAK,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAC,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAC,MAAM,8BAA8B,CAAC;AACpG,OAAO,EAAC,KAAK,QAAQ,EAAC,MAAM,QAAQ,CAAC;AAIrC,cAAc;AACd,oBAAY,mBAAmB;IAC3B,+BAA+B,gCAAgC;CAClE;AAED,cAAc;AACd,MAAM,WAAW,8CAA8C;IAC3D,IAAI,EAAE,mBAAmB,CAAC,+BAA+B,CAAC;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB,EAAE,OAAO,CAAC;CACpC;AAED,cAAc;AACd,MAAM,MAAM,eAAe,GAAG,8CAA8C,CAAC;AAE7E,cAAc;AACd,MAAM,WAAW,WAAY,SAAQ,eAAe;IAChD,UAAU,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC;CACtB;AAED,cAAc;AACd,MAAM,WAAW,WAAW;IACxB,gBAAgB,IAAI,MAAM,CAAC;CAC9B;AAID,cAAc;AACd,oBAAY,kEAAkE;IAC1E,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,QAAQ,YAAY;IACpB,QAAQ,YAAY;CACvB;AAID,cAAc;AACd,MAAM,MAAM,8DAA8D,GAAG;IACzE,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACjB,GAAG,CACE;IACI,IAAI,EAAE,kEAAkE,CAAC,OAAO,CAAC;IACjF,YAAY,EAAE,OAAO,CAAC;CACzB,GACD;IACI,IAAI,EAAE,kEAAkE,CAAC,MAAM,CAAC;IAChF,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,GACD;IACI,IAAI,EAAE,kEAAkE,CAAC,IAAI,CAAC;IAC9E,cAAc,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,GACD;IACI,IAAI,EAAE,kEAAkE,CAAC,QAAQ,CAAC;IAClF,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B,GACD;IACI,IAAI,EAAE,kEAAkE,CAAC,QAAQ,CAAC;IAClF,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B,CACN,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,iBAAkB,SAAQ,qBAAqB,CAAC,gBAAgB,CAAC;IAC9E,WAAW,EAAE,WAAW,CAAC;IAEzB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,wBAAwB,CACpB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACrB,OAAO,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;YAAC,EAAE,EAAE,QAAQ,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAC,CAAA;KAAC,CAAC,CAAC;IACnE,wBAAwB,CACpB,UAAU,EAAE,KAAK,CAAC,8DAA8D,CAAC,GAClF,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB"}
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import { type BaseDataCore, type BasePermissionDataCore } from '../../shared/types/base_core';
|
|
2
|
+
import { type ObjectMap } from '../../shared/private_utils';
|
|
3
|
+
import { type PrivateColumnType } from '../../shared/types/field_core';
|
|
4
|
+
import { type FieldId, type TableId } from '../../shared/types/hyper_ids';
|
|
2
5
|
import { type TableData, type TablePermissionData } from './table';
|
|
3
6
|
/** @hidden */
|
|
4
7
|
export interface BaseData extends BaseDataCore<TableData> {
|
|
8
|
+
allTableDataForEditModeConfiguration?: ObjectMap<TableId, {
|
|
9
|
+
id: TableId;
|
|
10
|
+
name: string;
|
|
11
|
+
primaryFieldId: FieldId;
|
|
12
|
+
fieldsById: ObjectMap<FieldId, {
|
|
13
|
+
id: FieldId;
|
|
14
|
+
name: string;
|
|
15
|
+
type: PrivateColumnType;
|
|
16
|
+
typeOptions: {
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
} | null | undefined;
|
|
19
|
+
}>;
|
|
20
|
+
}>;
|
|
5
21
|
}
|
|
6
22
|
/** @hidden */
|
|
7
23
|
export interface BasePermissionData extends BasePermissionDataCore<TablePermissionData> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/interface/types/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,YAAY,EAAE,KAAK,sBAAsB,EAAC,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAC,KAAK,SAAS,EAAE,KAAK,mBAAmB,EAAC,MAAM,SAAS,CAAC;AAEjE,cAAc;AACd,MAAM,WAAW,QAAS,SAAQ,YAAY,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/interface/types/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,YAAY,EAAE,KAAK,sBAAsB,EAAC,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAC,KAAK,iBAAiB,EAAC,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAC,KAAK,OAAO,EAAE,KAAK,OAAO,EAAC,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAC,KAAK,SAAS,EAAE,KAAK,mBAAmB,EAAC,MAAM,SAAS,CAAC;AAEjE,cAAc;AACd,MAAM,WAAW,QAAS,SAAQ,YAAY,CAAC,SAAS,CAAC;IACrD,oCAAoC,CAAC,EAAE,SAAS,CAC5C,OAAO,EACP;QACI,EAAE,EAAE,OAAO,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,OAAO,CAAC;QACxB,UAAU,EAAE,SAAS,CACjB,OAAO,EACP;YACI,EAAE,EAAE,OAAO,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,iBAAiB,CAAC;YACxB,WAAW,EAAE;gBAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;aAAC,GAAG,IAAI,GAAG,SAAS,CAAC;SAC5D,CACJ,CAAC;KACL,CACJ,CAAC;CACL;AAED,cAAc;AACd,MAAM,WAAW,kBAAmB,SAAQ,sBAAsB,CAAC,mBAAmB,CAAC;CAAG"}
|
|
@@ -1,13 +1,32 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import { type
|
|
2
|
+
import { type Record } from '../models/record';
|
|
3
|
+
import { type Field } from '../models/field';
|
|
4
4
|
/**
|
|
5
5
|
* Props for the {@link CellRenderer} component.
|
|
6
6
|
*
|
|
7
7
|
* @docsPath UI/components/CellRenderer
|
|
8
8
|
* @noInheritDoc
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
interface CellRendererProps {
|
|
11
|
+
/** The {@link Record} from which to render a cell. Either `record` or `cellValue` must be provided to the CellRenderer. If both are provided, `record` will be used. */
|
|
12
|
+
record?: Record | null | undefined;
|
|
13
|
+
/** The cell value to render. Either `record` or `cellValue` must be provided to the CellRenderer. If both are provided, `record` will be used. */
|
|
14
|
+
cellValue?: unknown;
|
|
15
|
+
/** The {@link Field} for a given {@link Record} being rendered as a cell. */
|
|
16
|
+
field: Field;
|
|
17
|
+
/** Whether to wrap cell contents. Defaults to true. */
|
|
18
|
+
shouldWrap?: boolean;
|
|
19
|
+
/** Additional class names to apply to the cell renderer container, separated by spaces. */
|
|
20
|
+
className?: string;
|
|
21
|
+
/** Additional styles to apply to the cell renderer container. */
|
|
22
|
+
style?: React.CSSProperties;
|
|
23
|
+
/** Additional class names to apply to the cell itself, separated by spaces. */
|
|
24
|
+
cellClassName?: string;
|
|
25
|
+
/** Additional styles to apply to the cell itself. */
|
|
26
|
+
cellStyle?: React.CSSProperties;
|
|
27
|
+
/** Render function if provided and validation fails. */
|
|
28
|
+
renderInvalidCellValue?: (cellValue: unknown, field: Field) => React.ReactElement;
|
|
29
|
+
}
|
|
11
30
|
/**
|
|
12
31
|
* Displays the contents of a cell given a field and record.
|
|
13
32
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell_renderer.d.ts","sourceRoot":"","sources":["../../../../../src/interface/ui/cell_renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"cell_renderer.d.ts","sourceRoot":"","sources":["../../../../../src/interface/ui/cell_renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAC,KAAK,MAAM,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,KAAK,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAE3C;;;;;GAKG;AACH,UAAU,iBAAiB;IACvB,wKAAwK;IACxK,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnC,kJAAkJ;IAClJ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,KAAK,EAAE,KAAK,CAAC;IACb,uDAAuD;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAG5B,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAChC,wDAAwD;IACxD,sBAAsB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,YAAY,CAAC;CACrF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,qBAEpD"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { type Table } from '../models/table';
|
|
2
2
|
import { type Base } from '../models/base';
|
|
3
3
|
import { type Field } from '../models/field';
|
|
4
|
+
import { type FieldConfig } from '../models/models';
|
|
5
|
+
import { type FieldId } from '../../shared/types/hyper_ids';
|
|
4
6
|
/**
|
|
5
7
|
* An object that represents a custom property that a block can set.
|
|
6
8
|
*
|
|
@@ -16,7 +18,7 @@ import { type Field } from '../models/field';
|
|
|
16
18
|
* | {
|
|
17
19
|
* type: 'field';
|
|
18
20
|
* table: Table;
|
|
19
|
-
*
|
|
21
|
+
* shouldFieldBeAllowed?: (field: {id: FieldId; config: FieldConfig}) => boolean; // If not provided, all fields in the table will be shown in the dropdown.
|
|
20
22
|
* defaultValue?: Field;
|
|
21
23
|
* }
|
|
22
24
|
* | {
|
|
@@ -45,8 +47,13 @@ type BlockPageElementCustomProperty = {
|
|
|
45
47
|
} | {
|
|
46
48
|
type: 'field';
|
|
47
49
|
table: Table;
|
|
48
|
-
/** If not provided, all visible fields in the table will be shown in the dropdown. */
|
|
50
|
+
/** @deprecated Prefer `shouldFieldBeAllowed` instead. If not provided, all visible fields in the table will be shown in the dropdown. */
|
|
49
51
|
possibleValues?: Array<Field>;
|
|
52
|
+
/** If provided, it will be used to filter the fields in the dropdown. */
|
|
53
|
+
shouldFieldBeAllowed?: (field: {
|
|
54
|
+
id: FieldId;
|
|
55
|
+
config: FieldConfig;
|
|
56
|
+
}) => boolean;
|
|
50
57
|
defaultValue?: Field;
|
|
51
58
|
} | {
|
|
52
59
|
type: 'table';
|
|
@@ -70,11 +77,11 @@ type BlockPageElementCustomProperty = {
|
|
|
70
77
|
*
|
|
71
78
|
* function getCustomProperties(base: Base) {
|
|
72
79
|
* const table = base.tables[0];
|
|
73
|
-
* const
|
|
80
|
+
* const isNumberField = (field: {id: FieldId, config: FieldConfig}) => field.config.type === FieldType.NUMBER;
|
|
74
81
|
* return [
|
|
75
82
|
* {key: 'title', label: 'Title', type: 'string', defaultValue: 'Chart'},
|
|
76
|
-
* {key: 'xAxis', label: 'X-axis', type: 'field', table,
|
|
77
|
-
* {key: 'yAxis', label: 'Y-axis', type: 'field', table,
|
|
83
|
+
* {key: 'xAxis', label: 'X-axis', type: 'field', table, shouldFieldBeAllowed: isNumberField},
|
|
84
|
+
* {key: 'yAxis', label: 'Y-axis', type: 'field', table, shouldFieldBeAllowed: isNumberField},
|
|
78
85
|
* {key: 'color', label: 'Color', type: 'enum', possibleValues: [{value: 'red', label: 'Red'}, {value: 'blue', label: 'Blue'}, {value: 'green', label: 'Green'}], defaultValue: 'red'},
|
|
79
86
|
* {key: 'showLegend', label: 'Show Legend', type: 'boolean', defaultValue: true},
|
|
80
87
|
* ];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_custom_properties.d.ts","sourceRoot":"","sources":["../../../../../src/interface/ui/use_custom_properties.ts"],"names":[],"mappings":"AASA,OAAO,EAAC,KAAK,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAC,KAAK,IAAI,EAAC,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAC,KAAK,KAAK,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"use_custom_properties.d.ts","sourceRoot":"","sources":["../../../../../src/interface/ui/use_custom_properties.ts"],"names":[],"mappings":"AASA,OAAO,EAAC,KAAK,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAC,KAAK,IAAI,EAAC,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAC,KAAK,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAC,KAAK,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAC,KAAK,OAAO,EAAC,MAAM,8BAA8B,CAAC;AAY1D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,KAAK,8BAA8B,GAAG;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,GAAG,CAC/D;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAC,GACxC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAC,GACvC;IACI,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,GACD;IACI,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,yIAAyI;IACzI,cAAc,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,yEAAyE;IACzE,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAC,KAAK,OAAO,CAAC;IAC9E,YAAY,CAAC,EAAE,KAAK,CAAC;CACxB,GACD;IACI,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,EAAE,KAAK,CAAC;CACxB,CACN,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,mBAAmB,CAC/B,mBAAmB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,8BAA8B,CAAC,GAC3E;IAAC,wBAAwB,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;IAAC,UAAU,EAAE;QAAC,KAAK,EAAE,KAAK,CAAA;KAAC,GAAG,IAAI,CAAA;CAAC,CA2DzF"}
|
|
@@ -35,7 +35,7 @@ export interface FieldTypeConfig {
|
|
|
35
35
|
export interface FieldTypeProviderCore {
|
|
36
36
|
isComputed(fieldData: FieldDataCore): boolean;
|
|
37
37
|
validateCellValueForUpdate(appInterface: AppInterface, newCellValue: unknown, currentCellValue: unknown, fieldData: FieldDataCore): CellValueValidationResult;
|
|
38
|
-
getConfig(appInterface: AppInterface, fieldData: FieldDataCore, fieldNamesById: ObjectMap<FieldId, string>): FieldTypeConfig;
|
|
38
|
+
getConfig(appInterface: AppInterface, fieldData: Pick<FieldDataCore, 'type' | 'typeOptions'>, fieldNamesById: ObjectMap<FieldId, string>): FieldTypeConfig;
|
|
39
39
|
convertStringToCellValue(appInterface: AppInterface, string: string, fieldData: FieldDataCore, opts?: {
|
|
40
40
|
parseDateCellValueInColumnTimeZone?: boolean;
|
|
41
41
|
}): unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"airtable_interface_core.d.ts","sourceRoot":"","sources":["../../../../../src/shared/types/airtable_interface_core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAC,KAAK,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,KAAK,IAAI,EAAC,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAC,KAAK,OAAO,EAAE,KAAK,mBAAmB,EAAC,MAAM,aAAa,CAAC;AACnE,OAAO,EAAC,KAAK,SAAS,EAAE,KAAK,aAAa,EAAC,MAAM,cAAc,CAAC;AAChE,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,gCAAgC,EACxC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,KAAK,YAAY,EAAE,KAAK,WAAW,EAAC,MAAM,aAAa,CAAC;AAChE,OAAO,EAAC,KAAK,aAAa,EAAC,MAAM,cAAc,CAAC;AAChD,OAAO,EAAC,KAAK,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAE5D,cAAc;AACd,MAAM,WAAW,eAAe;IAC5B,oBAAoB,EAAE,gBAAgB,CAAC;IACvC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;IACtC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,+BAA+B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACtD;AAED,cAAc;AACd,KAAK,yBAAyB,GAAG;IAAC,OAAO,EAAE,IAAI,CAAA;CAAC,GAAG;IAAC,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAAC;AACpF,cAAc;AACd,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;CACtC;AACD,cAAc;AACd,MAAM,WAAW,qBAAqB;IAClC,UAAU,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC;IAC9C,0BAA0B,CACtB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,EACrB,gBAAgB,EAAE,OAAO,EACzB,SAAS,EAAE,aAAa,GACzB,yBAAyB,CAAC;IAC7B,SAAS,CACL,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"airtable_interface_core.d.ts","sourceRoot":"","sources":["../../../../../src/shared/types/airtable_interface_core.ts"],"names":[],"mappings":"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"}
|