ferns-ui 0.45.1 → 0.45.2
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/Common.d.ts +83 -8
- package/dist/FernsProvider.d.ts +2 -1
- package/dist/FernsProvider.js +4 -2
- package/dist/FernsProvider.js.map +1 -1
- package/dist/OpenAPIContext.d.ts +1 -31
- package/dist/OpenAPIContext.js +1 -2
- package/dist/OpenAPIContext.js.map +1 -1
- package/dist/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl.js +20 -4
- package/dist/SegmentedControl.js.map +1 -1
- package/dist/TapToEdit.d.ts +1 -1
- package/dist/TapToEdit.js +2 -2
- package/dist/TapToEdit.js.map +1 -1
- package/package.json +1 -1
- package/src/Common.ts +108 -7
- package/src/FernsProvider.tsx +11 -2
- package/src/OpenAPIContext.tsx +9 -37
- package/src/SegmentedControl.tsx +16 -6
- package/src/TapToEdit.tsx +8 -1
package/dist/Common.d.ts
CHANGED
|
@@ -246,18 +246,27 @@ export interface PillProps {
|
|
|
246
246
|
enabled?: boolean;
|
|
247
247
|
onClick: (enabled: boolean) => void;
|
|
248
248
|
}
|
|
249
|
-
|
|
249
|
+
type BaseSegmentedControlProps = {
|
|
250
250
|
items: string[];
|
|
251
|
-
onChange?: ({ activeIndex }: {
|
|
252
|
-
activeIndex: number | number[];
|
|
253
|
-
}) => void;
|
|
254
|
-
selectedItemIndex?: number;
|
|
255
|
-
selectedItemIndexes?: number[];
|
|
256
251
|
responsive?: boolean;
|
|
257
252
|
size?: "md" | "lg";
|
|
258
|
-
multiselect?: boolean;
|
|
259
253
|
selectLimit?: number;
|
|
260
|
-
}
|
|
254
|
+
};
|
|
255
|
+
export type SegmentedControlPropsSingleSelect = BaseSegmentedControlProps & {
|
|
256
|
+
multiselect?: false;
|
|
257
|
+
onChange: ({ activeIndex }: {
|
|
258
|
+
activeIndex: number;
|
|
259
|
+
}) => void;
|
|
260
|
+
selectedItemIndex?: number;
|
|
261
|
+
};
|
|
262
|
+
export type SegmentedControlPropsMultiSelect = BaseSegmentedControlProps & {
|
|
263
|
+
multiselect: true;
|
|
264
|
+
onChange: ({ activeIndex }: {
|
|
265
|
+
activeIndex: number[];
|
|
266
|
+
}) => void;
|
|
267
|
+
selectedItemIndexes?: number[];
|
|
268
|
+
};
|
|
269
|
+
export type SegmentedControlProps = SegmentedControlPropsSingleSelect | SegmentedControlPropsMultiSelect;
|
|
261
270
|
export interface FieldWithLabelsProps {
|
|
262
271
|
testID?: string;
|
|
263
272
|
errorMessage?: string;
|
|
@@ -1100,6 +1109,10 @@ export interface SpinnerProps {
|
|
|
1100
1109
|
size?: "sm" | "md";
|
|
1101
1110
|
color?: Color;
|
|
1102
1111
|
}
|
|
1112
|
+
export type ColumnSortInterface = {
|
|
1113
|
+
column: number;
|
|
1114
|
+
direction: "asc" | "desc";
|
|
1115
|
+
};
|
|
1103
1116
|
export interface TableProps {
|
|
1104
1117
|
/**
|
|
1105
1118
|
* Must be instances of TableHeader, TableRow, and/or TableFooter components.
|
|
@@ -1175,6 +1188,19 @@ export interface TableRowProps {
|
|
|
1175
1188
|
*/
|
|
1176
1189
|
color?: BoxColor;
|
|
1177
1190
|
}
|
|
1191
|
+
export interface TableContextType {
|
|
1192
|
+
columns: Array<number | string>;
|
|
1193
|
+
hasDrawerContents: boolean;
|
|
1194
|
+
sortColumn?: ColumnSortInterface | undefined;
|
|
1195
|
+
setSortColumn?: (sort: ColumnSortInterface | undefined) => void;
|
|
1196
|
+
stickyHeader?: boolean;
|
|
1197
|
+
borderStyle?: "sm" | "none";
|
|
1198
|
+
alternateRowBackground?: boolean;
|
|
1199
|
+
page?: number;
|
|
1200
|
+
}
|
|
1201
|
+
export interface TableContextProviderProps extends TableContextType {
|
|
1202
|
+
children: React.ReactElement;
|
|
1203
|
+
}
|
|
1178
1204
|
export interface TextProps {
|
|
1179
1205
|
align?: "left" | "right" | "center" | "justify";
|
|
1180
1206
|
children?: React.ReactNode;
|
|
@@ -1245,6 +1271,7 @@ export interface TapToEditProps extends Omit<FieldProps, "onChange" | "value"> {
|
|
|
1245
1271
|
openApiModel?: string;
|
|
1246
1272
|
openApiField?: string;
|
|
1247
1273
|
showDescriptionAsTooltip?: boolean;
|
|
1274
|
+
onlyShowDescriptionWhileEditing?: boolean;
|
|
1248
1275
|
}
|
|
1249
1276
|
export interface APIError {
|
|
1250
1277
|
status: number;
|
|
@@ -1264,4 +1291,52 @@ export interface APIError {
|
|
|
1264
1291
|
};
|
|
1265
1292
|
};
|
|
1266
1293
|
}
|
|
1294
|
+
export type OpenApiPropertyType = "string" | "date" | "datetime" | "boolean" | "array" | "object" | "number" | "any";
|
|
1295
|
+
export type OpenApiProperty = {
|
|
1296
|
+
type?: OpenApiPropertyType;
|
|
1297
|
+
format?: string;
|
|
1298
|
+
properties?: OpenApiProperty;
|
|
1299
|
+
items?: OpenApiProperty[];
|
|
1300
|
+
description?: string;
|
|
1301
|
+
required?: string[];
|
|
1302
|
+
enum?: string[];
|
|
1303
|
+
};
|
|
1304
|
+
export type ModelFields = {
|
|
1305
|
+
type: "object" | "array";
|
|
1306
|
+
required: string[];
|
|
1307
|
+
properties: {
|
|
1308
|
+
[name: string]: OpenApiProperty;
|
|
1309
|
+
};
|
|
1310
|
+
};
|
|
1311
|
+
export interface OpenAPISpec {
|
|
1312
|
+
paths: {
|
|
1313
|
+
[key: string]: any;
|
|
1314
|
+
};
|
|
1315
|
+
}
|
|
1316
|
+
export type ModelFieldConfig = any;
|
|
1317
|
+
export interface OpenAPIProviderProps {
|
|
1318
|
+
children: React.ReactElement;
|
|
1319
|
+
specUrl?: string;
|
|
1320
|
+
}
|
|
1321
|
+
export interface OpenAPIContextType {
|
|
1322
|
+
spec: OpenAPISpec | null;
|
|
1323
|
+
getModelFields: (modelName: string) => ModelFields | null;
|
|
1324
|
+
getModelField: (modelName: string, field: string) => OpenApiProperty | null;
|
|
1325
|
+
}
|
|
1326
|
+
export interface ModelAdminFieldConfig {
|
|
1327
|
+
fieldKey: string;
|
|
1328
|
+
title: string;
|
|
1329
|
+
description?: string;
|
|
1330
|
+
type: OpenApiPropertyType;
|
|
1331
|
+
width?: number;
|
|
1332
|
+
minWidth?: number;
|
|
1333
|
+
options?: string[];
|
|
1334
|
+
sort?: string;
|
|
1335
|
+
CustomComponent?: (props: ModelAdminCustomComponentProps) => React.ReactElement | null;
|
|
1336
|
+
}
|
|
1337
|
+
export interface ModelAdminCustomComponentProps extends Omit<FieldProps, "name"> {
|
|
1338
|
+
doc: any;
|
|
1339
|
+
fieldKey: string;
|
|
1340
|
+
editing: boolean;
|
|
1341
|
+
}
|
|
1267
1342
|
export {};
|
package/dist/FernsProvider.d.ts
CHANGED
package/dist/FernsProvider.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Host } from "react-native-portalize";
|
|
3
3
|
import { ToastProvider } from "react-native-toast-notifications";
|
|
4
|
+
import { OpenAPIProvider } from "./OpenAPIContext";
|
|
4
5
|
import { ThemeProvider } from "./Theme";
|
|
5
6
|
import { Toast } from "./Toast";
|
|
6
|
-
export const FernsProvider = ({ children }) => {
|
|
7
|
+
export const FernsProvider = ({ children, openAPISpecUrl, }) => {
|
|
7
8
|
return (React.createElement(ThemeProvider, null,
|
|
8
9
|
React.createElement(ToastProvider, { animationDuration: 250, animationType: "slide-in", duration: 50000, offset: 50, placement: "bottom", renderToast: (toastOptions) => React.createElement(Toast, Object.assign({}, toastOptions)), swipeEnabled: true },
|
|
9
|
-
React.createElement(
|
|
10
|
+
React.createElement(OpenAPIProvider, { specUrl: openAPISpecUrl },
|
|
11
|
+
React.createElement(Host, null, children)))));
|
|
10
12
|
};
|
|
11
13
|
//# sourceMappingURL=FernsProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FernsProvider.js","sourceRoot":"","sources":["../src/FernsProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,kCAAkC,CAAC;AAE/D,OAAO,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AACtC,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAE9B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"FernsProvider.js","sourceRoot":"","sources":["../src/FernsProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,kCAAkC,CAAC;AAE/D,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AACtC,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAE9B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,QAAQ,EACR,cAAc,GAIf,EAAsB,EAAE;IACvB,OAAO,CACL,oBAAC,aAAa;QACZ,oBAAC,aAAa,IACZ,iBAAiB,EAAE,GAAG,EACtB,aAAa,EAAC,UAAU,EACxB,QAAQ,EAAE,KAAK,EACf,MAAM,EAAE,EAAE,EACV,SAAS,EAAC,QAAQ,EAClB,WAAW,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,oBAAC,KAAK,oBAAM,YAAoB,EAAI,EACnE,YAAY;YAEZ,oBAAC,eAAe,IAAC,OAAO,EAAE,cAAc;gBACtC,oBAAC,IAAI,QAAE,QAAQ,CAAQ,CACP,CACJ,CACF,CACjB,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/OpenAPIContext.d.ts
CHANGED
|
@@ -1,34 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
3
|
-
paths: {
|
|
4
|
-
[key: string]: any;
|
|
5
|
-
};
|
|
6
|
-
}
|
|
7
|
-
export type ModelFieldConfig = any;
|
|
8
|
-
export type OpenApiPropertyType = "string" | "number" | "boolean" | "array" | "object";
|
|
9
|
-
export type OpenApiProperty = {
|
|
10
|
-
type?: OpenApiPropertyType;
|
|
11
|
-
format?: string;
|
|
12
|
-
properties?: OpenApiProperty;
|
|
13
|
-
items?: OpenApiProperty[];
|
|
14
|
-
description?: string;
|
|
15
|
-
};
|
|
16
|
-
export type ModelFields = {
|
|
17
|
-
type: "object" | "array";
|
|
18
|
-
required: string[];
|
|
19
|
-
properties: {
|
|
20
|
-
[name: string]: OpenApiProperty;
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
interface OpenAPIContextType {
|
|
24
|
-
spec: OpenAPISpec | null;
|
|
25
|
-
getModelFields: (modelName: string) => ModelFields | null;
|
|
26
|
-
getModelField: (modelName: string, field: string) => OpenApiProperty;
|
|
27
|
-
}
|
|
28
|
-
interface OpenAPIProviderProps {
|
|
29
|
-
children: React.ReactElement;
|
|
30
|
-
specUrl?: string;
|
|
31
|
-
}
|
|
2
|
+
import { OpenAPIContextType, OpenAPIProviderProps } from "./Common";
|
|
32
3
|
export declare const OpenAPIProvider: ({ children, specUrl }: OpenAPIProviderProps) => React.ReactElement;
|
|
33
4
|
export declare const useOpenAPISpec: () => OpenAPIContextType;
|
|
34
|
-
export {};
|
package/dist/OpenAPIContext.js
CHANGED
|
@@ -13,8 +13,7 @@ export const OpenAPIProvider = ({ children, specUrl }) => {
|
|
|
13
13
|
}
|
|
14
14
|
return null;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
return items;
|
|
16
|
+
return (_j = (_h = (_g = (_f = (_e = (_d = (_c = (_b = rootConfig === null || rootConfig === void 0 ? void 0 : rootConfig.get) === null || _b === void 0 ? void 0 : _b.responses) === null || _c === void 0 ? void 0 : _c["200"]) === null || _d === void 0 ? void 0 : _d.content) === null || _e === void 0 ? void 0 : _e["application/json"]) === null || _f === void 0 ? void 0 : _f.schema) === null || _g === void 0 ? void 0 : _g.properties) === null || _h === void 0 ? void 0 : _h.data) === null || _j === void 0 ? void 0 : _j.items;
|
|
18
17
|
};
|
|
19
18
|
const getModelField = (modelName, fieldName) => {
|
|
20
19
|
var _a, _b;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAPIContext.js","sourceRoot":"","sources":["../src/OpenAPIContext.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,EAAE,EAAC,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenAPIContext.js","sourceRoot":"","sources":["../src/OpenAPIContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { SegmentedControlProps } from "./Common";
|
|
3
|
-
export declare const SegmentedControl: ({ items, onChange,
|
|
3
|
+
export declare const SegmentedControl: ({ items, onChange, multiselect, selectLimit, ...props }: SegmentedControlProps) => React.JSX.Element | null;
|
package/dist/SegmentedControl.js
CHANGED
|
@@ -1,7 +1,21 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
1
12
|
import React from "react";
|
|
2
13
|
import { Box } from "./Box";
|
|
3
14
|
import { Text } from "./Text";
|
|
4
|
-
export const SegmentedControl = (
|
|
15
|
+
export const SegmentedControl = (_a) => {
|
|
16
|
+
var { items, onChange = () => { }, multiselect = false, selectLimit = 1 } = _a, props = __rest(_a, ["items", "onChange", "multiselect", "selectLimit"]);
|
|
17
|
+
const selectedItemIndex = props.selectedItemIndex;
|
|
18
|
+
const selectedItemIndexes = props.selectedItemIndexes;
|
|
5
19
|
const renderItem = (item) => {
|
|
6
20
|
return (React.createElement(Text, { align: "center", weight: "bold" }, item));
|
|
7
21
|
// if (typeof item === "string") {
|
|
@@ -38,17 +52,19 @@ export const SegmentedControl = ({ items, onChange = () => { }, selectedItemInde
|
|
|
38
52
|
return;
|
|
39
53
|
}
|
|
40
54
|
if (multiselect) {
|
|
55
|
+
const typedOnChange = onChange;
|
|
41
56
|
if (selectedItemIndexes === null || selectedItemIndexes === void 0 ? void 0 : selectedItemIndexes.includes(index)) {
|
|
42
|
-
|
|
57
|
+
typedOnChange({ activeIndex: selectedItemIndexes.filter((i) => i !== index) });
|
|
43
58
|
}
|
|
44
59
|
else {
|
|
45
60
|
const currentIndexes = [...selectedItemIndexes];
|
|
46
61
|
currentIndexes === null || currentIndexes === void 0 ? void 0 : currentIndexes.push(index);
|
|
47
|
-
|
|
62
|
+
typedOnChange({ activeIndex: currentIndexes === null || currentIndexes === void 0 ? void 0 : currentIndexes.sort() });
|
|
48
63
|
}
|
|
49
64
|
}
|
|
50
65
|
else {
|
|
51
|
-
|
|
66
|
+
const typedOnChange = onChange;
|
|
67
|
+
typedOnChange({ activeIndex: index });
|
|
52
68
|
}
|
|
53
69
|
} }, renderItem(item)))))));
|
|
54
70
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControl.js","sourceRoot":"","sources":["../src/SegmentedControl.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SegmentedControl.js","sourceRoot":"","sources":["../src/SegmentedControl.tsx"],"names":[],"mappings":"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"}
|
package/dist/TapToEdit.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ReactElement } from "react";
|
|
2
2
|
import { TapToEditProps } from "./Common";
|
|
3
3
|
export declare function formatAddress(address: any, asString?: boolean): string;
|
|
4
|
-
export declare const TapToEdit: ({ value, setValue, placeholder, title, onSave, editable, isEditing, rowBoxProps, transform, fieldComponent, withConfirmation, confirmationText, confirmationHeading, description: propsDescription, showDescriptionAsTooltip, ...fieldProps }: TapToEditProps) => ReactElement;
|
|
4
|
+
export declare const TapToEdit: ({ value, setValue, placeholder, title, onSave, editable, isEditing, rowBoxProps, transform, fieldComponent, withConfirmation, confirmationText, confirmationHeading, description: propsDescription, showDescriptionAsTooltip, onlyShowDescriptionWhileEditing, ...fieldProps }: TapToEditProps) => ReactElement;
|
package/dist/TapToEdit.js
CHANGED
|
@@ -48,7 +48,7 @@ export const TapToEdit = (_a) => {
|
|
|
48
48
|
var { value, setValue, placeholder, title, onSave, editable = true, isEditing = false, rowBoxProps, transform, fieldComponent, withConfirmation = false, confirmationText = "Are you sure you want to save your changes?", confirmationHeading = "Confirm", description: propsDescription,
|
|
49
49
|
// openApiModel,
|
|
50
50
|
// openApiField,
|
|
51
|
-
showDescriptionAsTooltip = false } = _a, fieldProps = __rest(_a, ["value", "setValue", "placeholder", "title", "onSave", "editable", "isEditing", "rowBoxProps", "transform", "fieldComponent", "withConfirmation", "confirmationText", "confirmationHeading", "description", "showDescriptionAsTooltip"]);
|
|
51
|
+
showDescriptionAsTooltip = false, onlyShowDescriptionWhileEditing = true } = _a, fieldProps = __rest(_a, ["value", "setValue", "placeholder", "title", "onSave", "editable", "isEditing", "rowBoxProps", "transform", "fieldComponent", "withConfirmation", "confirmationText", "confirmationHeading", "description", "showDescriptionAsTooltip", "onlyShowDescriptionWhileEditing"]);
|
|
52
52
|
const [editing, setEditing] = useState(false);
|
|
53
53
|
const [initialValue] = useState(value);
|
|
54
54
|
// const {getModelField} = useOpenAPISpec();
|
|
@@ -141,7 +141,7 @@ export const TapToEdit = (_a) => {
|
|
|
141
141
|
React.createElement(Text, { weight: "bold" },
|
|
142
142
|
title,
|
|
143
143
|
":"),
|
|
144
|
-
Boolean(description && !showDescriptionAsTooltip) && React.createElement(Text,
|
|
144
|
+
Boolean(description && !showDescriptionAsTooltip && !onlyShowDescriptionWhileEditing) && (React.createElement(Text, { color: "gray", size: "sm" }, description))));
|
|
145
145
|
};
|
|
146
146
|
return (React.createElement(Box, Object.assign({ direction: "row", justifyContent: "between", paddingX: 3, paddingY: 2, width: "100%" }, rowBoxProps),
|
|
147
147
|
showDescriptionAsTooltip ? (React.createElement(Tooltip, { idealDirection: "top", text: description }, renderTitleDescription())) : (renderTitleDescription()),
|
package/dist/TapToEdit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TapToEdit.js","sourceRoot":"","sources":["../src/TapToEdit.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TapToEdit.js","sourceRoot":"","sources":["../src/TapToEdit.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Common.ts
CHANGED
|
@@ -1878,16 +1878,28 @@ export interface PillProps {
|
|
|
1878
1878
|
onClick: (enabled: boolean) => void;
|
|
1879
1879
|
}
|
|
1880
1880
|
|
|
1881
|
-
|
|
1881
|
+
type BaseSegmentedControlProps = {
|
|
1882
1882
|
items: string[];
|
|
1883
|
-
onChange?: ({activeIndex}: {activeIndex: number | number[]}) => void;
|
|
1884
|
-
selectedItemIndex?: number;
|
|
1885
|
-
selectedItemIndexes?: number[];
|
|
1886
1883
|
responsive?: boolean;
|
|
1887
|
-
size?: "md" | "lg";
|
|
1888
|
-
multiselect?: boolean;
|
|
1884
|
+
size?: "md" | "lg";
|
|
1889
1885
|
selectLimit?: number;
|
|
1890
|
-
}
|
|
1886
|
+
};
|
|
1887
|
+
|
|
1888
|
+
export type SegmentedControlPropsSingleSelect = BaseSegmentedControlProps & {
|
|
1889
|
+
multiselect?: false;
|
|
1890
|
+
onChange: ({activeIndex}: {activeIndex: number}) => void;
|
|
1891
|
+
selectedItemIndex?: number;
|
|
1892
|
+
};
|
|
1893
|
+
|
|
1894
|
+
export type SegmentedControlPropsMultiSelect = BaseSegmentedControlProps & {
|
|
1895
|
+
multiselect: true;
|
|
1896
|
+
onChange: ({activeIndex}: {activeIndex: number[]}) => void;
|
|
1897
|
+
selectedItemIndexes?: number[];
|
|
1898
|
+
};
|
|
1899
|
+
|
|
1900
|
+
export type SegmentedControlProps =
|
|
1901
|
+
| SegmentedControlPropsSingleSelect
|
|
1902
|
+
| SegmentedControlPropsMultiSelect;
|
|
1891
1903
|
|
|
1892
1904
|
// Shared props for fields with labels, subtext, and error messages.
|
|
1893
1905
|
export interface FieldWithLabelsProps {
|
|
@@ -2902,6 +2914,11 @@ export interface SpinnerProps {
|
|
|
2902
2914
|
color?: Color;
|
|
2903
2915
|
}
|
|
2904
2916
|
|
|
2917
|
+
export type ColumnSortInterface = {
|
|
2918
|
+
column: number;
|
|
2919
|
+
direction: "asc" | "desc";
|
|
2920
|
+
};
|
|
2921
|
+
|
|
2905
2922
|
export interface TableProps {
|
|
2906
2923
|
/**
|
|
2907
2924
|
* Must be instances of TableHeader, TableRow, and/or TableFooter components.
|
|
@@ -2981,6 +2998,21 @@ export interface TableRowProps {
|
|
|
2981
2998
|
color?: BoxColor;
|
|
2982
2999
|
}
|
|
2983
3000
|
|
|
3001
|
+
export interface TableContextType {
|
|
3002
|
+
columns: Array<number | string>;
|
|
3003
|
+
hasDrawerContents: boolean;
|
|
3004
|
+
sortColumn?: ColumnSortInterface | undefined;
|
|
3005
|
+
setSortColumn?: (sort: ColumnSortInterface | undefined) => void;
|
|
3006
|
+
stickyHeader?: boolean;
|
|
3007
|
+
borderStyle?: "sm" | "none";
|
|
3008
|
+
alternateRowBackground?: boolean;
|
|
3009
|
+
page?: number;
|
|
3010
|
+
}
|
|
3011
|
+
|
|
3012
|
+
export interface TableContextProviderProps extends TableContextType {
|
|
3013
|
+
children: React.ReactElement;
|
|
3014
|
+
}
|
|
3015
|
+
|
|
2984
3016
|
export interface TextProps {
|
|
2985
3017
|
align?: "left" | "right" | "center" | "justify"; // default "left"
|
|
2986
3018
|
children?: React.ReactNode;
|
|
@@ -3063,6 +3095,8 @@ export interface TapToEditProps extends Omit<FieldProps, "onChange" | "value"> {
|
|
|
3063
3095
|
openApiModel?: string;
|
|
3064
3096
|
openApiField?: string;
|
|
3065
3097
|
showDescriptionAsTooltip?: boolean;
|
|
3098
|
+
// Default true. If false, description is shown below the value always.
|
|
3099
|
+
onlyShowDescriptionWhileEditing?: boolean;
|
|
3066
3100
|
}
|
|
3067
3101
|
|
|
3068
3102
|
export interface APIError {
|
|
@@ -3081,3 +3115,70 @@ export interface APIError {
|
|
|
3081
3115
|
meta?: {[id: string]: any};
|
|
3082
3116
|
};
|
|
3083
3117
|
}
|
|
3118
|
+
|
|
3119
|
+
export type OpenApiPropertyType =
|
|
3120
|
+
| "string"
|
|
3121
|
+
| "date"
|
|
3122
|
+
| "datetime"
|
|
3123
|
+
| "boolean"
|
|
3124
|
+
| "array"
|
|
3125
|
+
| "object"
|
|
3126
|
+
| "number"
|
|
3127
|
+
| "any";
|
|
3128
|
+
|
|
3129
|
+
export type OpenApiProperty = {
|
|
3130
|
+
type?: OpenApiPropertyType;
|
|
3131
|
+
format?: string;
|
|
3132
|
+
properties?: OpenApiProperty;
|
|
3133
|
+
items?: OpenApiProperty[];
|
|
3134
|
+
description?: string;
|
|
3135
|
+
// TODO: is this actually there?
|
|
3136
|
+
required?: string[];
|
|
3137
|
+
enum?: string[];
|
|
3138
|
+
};
|
|
3139
|
+
|
|
3140
|
+
export type ModelFields = {
|
|
3141
|
+
type: "object" | "array";
|
|
3142
|
+
required: string[];
|
|
3143
|
+
properties: {[name: string]: OpenApiProperty};
|
|
3144
|
+
};
|
|
3145
|
+
|
|
3146
|
+
export interface OpenAPISpec {
|
|
3147
|
+
paths: {
|
|
3148
|
+
[key: string]: any;
|
|
3149
|
+
};
|
|
3150
|
+
}
|
|
3151
|
+
|
|
3152
|
+
export type ModelFieldConfig = any;
|
|
3153
|
+
|
|
3154
|
+
export interface OpenAPIProviderProps {
|
|
3155
|
+
children: React.ReactElement;
|
|
3156
|
+
specUrl?: string;
|
|
3157
|
+
}
|
|
3158
|
+
|
|
3159
|
+
export interface OpenAPIContextType {
|
|
3160
|
+
spec: OpenAPISpec | null;
|
|
3161
|
+
getModelFields: (modelName: string) => ModelFields | null;
|
|
3162
|
+
getModelField: (modelName: string, field: string) => OpenApiProperty | null;
|
|
3163
|
+
}
|
|
3164
|
+
|
|
3165
|
+
// The config for a single column in the table display of a model.
|
|
3166
|
+
export interface ModelAdminFieldConfig {
|
|
3167
|
+
fieldKey: string; // Dot notation representation of the field.
|
|
3168
|
+
title: string;
|
|
3169
|
+
description?: string;
|
|
3170
|
+
type: OpenApiPropertyType;
|
|
3171
|
+
width?: number;
|
|
3172
|
+
minWidth?: number;
|
|
3173
|
+
options?: string[];
|
|
3174
|
+
sort?: string;
|
|
3175
|
+
CustomComponent?: (props: ModelAdminCustomComponentProps) => React.ReactElement | null;
|
|
3176
|
+
}
|
|
3177
|
+
|
|
3178
|
+
// The props for a custom column component for ModelAdmin.
|
|
3179
|
+
export interface ModelAdminCustomComponentProps extends Omit<FieldProps, "name"> {
|
|
3180
|
+
doc: any; // The rest of the document.
|
|
3181
|
+
fieldKey: string; // Dot notation representation of the field.
|
|
3182
|
+
// user: User;
|
|
3183
|
+
editing: boolean; // Allow for inline editing of the field.
|
|
3184
|
+
}
|
package/src/FernsProvider.tsx
CHANGED
|
@@ -2,10 +2,17 @@ import React from "react";
|
|
|
2
2
|
import {Host} from "react-native-portalize";
|
|
3
3
|
import {ToastProvider} from "react-native-toast-notifications";
|
|
4
4
|
|
|
5
|
+
import {OpenAPIProvider} from "./OpenAPIContext";
|
|
5
6
|
import {ThemeProvider} from "./Theme";
|
|
6
7
|
import {Toast} from "./Toast";
|
|
7
8
|
|
|
8
|
-
export const FernsProvider = ({
|
|
9
|
+
export const FernsProvider = ({
|
|
10
|
+
children,
|
|
11
|
+
openAPISpecUrl,
|
|
12
|
+
}: {
|
|
13
|
+
children: React.ReactNode;
|
|
14
|
+
openAPISpecUrl?: string;
|
|
15
|
+
}): React.ReactElement => {
|
|
9
16
|
return (
|
|
10
17
|
<ThemeProvider>
|
|
11
18
|
<ToastProvider
|
|
@@ -17,7 +24,9 @@ export const FernsProvider = ({children}: {children: React.ReactNode}): React.Re
|
|
|
17
24
|
renderToast={(toastOptions) => <Toast {...(toastOptions as any)} />}
|
|
18
25
|
swipeEnabled
|
|
19
26
|
>
|
|
20
|
-
<
|
|
27
|
+
<OpenAPIProvider specUrl={openAPISpecUrl}>
|
|
28
|
+
<Host>{children}</Host>
|
|
29
|
+
</OpenAPIProvider>
|
|
21
30
|
</ToastProvider>
|
|
22
31
|
</ThemeProvider>
|
|
23
32
|
);
|
package/src/OpenAPIContext.tsx
CHANGED
|
@@ -1,42 +1,16 @@
|
|
|
1
1
|
import camelCase from "lodash/camelCase";
|
|
2
2
|
import React, {createContext, useContext, useEffect, useState} from "react";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export type OpenApiPropertyType = "string" | "number" | "boolean" | "array" | "object";
|
|
13
|
-
export type OpenApiProperty = {
|
|
14
|
-
type?: OpenApiPropertyType;
|
|
15
|
-
format?: string;
|
|
16
|
-
properties?: OpenApiProperty;
|
|
17
|
-
items?: OpenApiProperty[];
|
|
18
|
-
description?: string;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export type ModelFields = {
|
|
22
|
-
type: "object" | "array";
|
|
23
|
-
required: string[];
|
|
24
|
-
properties: {[name: string]: OpenApiProperty};
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
interface OpenAPIContextType {
|
|
28
|
-
spec: OpenAPISpec | null;
|
|
29
|
-
getModelFields: (modelName: string) => ModelFields | null;
|
|
30
|
-
getModelField: (modelName: string, field: string) => OpenApiProperty;
|
|
31
|
-
}
|
|
4
|
+
import {
|
|
5
|
+
ModelFieldConfig,
|
|
6
|
+
ModelFields,
|
|
7
|
+
OpenAPIContextType,
|
|
8
|
+
OpenAPIProviderProps,
|
|
9
|
+
OpenAPISpec,
|
|
10
|
+
} from "./Common";
|
|
32
11
|
|
|
33
12
|
const OpenAPIContext = createContext<OpenAPIContextType | null>(null);
|
|
34
13
|
|
|
35
|
-
interface OpenAPIProviderProps {
|
|
36
|
-
children: React.ReactElement;
|
|
37
|
-
specUrl?: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
14
|
export const OpenAPIProvider = ({children, specUrl}: OpenAPIProviderProps): React.ReactElement => {
|
|
41
15
|
const [spec, setSpec] = useState<OpenAPISpec | null>(null);
|
|
42
16
|
|
|
@@ -50,10 +24,8 @@ export const OpenAPIProvider = ({children, specUrl}: OpenAPIProviderProps): Reac
|
|
|
50
24
|
return null;
|
|
51
25
|
}
|
|
52
26
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
?.items;
|
|
56
|
-
return items;
|
|
27
|
+
return rootConfig?.get?.responses?.["200"]?.content?.["application/json"]?.schema?.properties
|
|
28
|
+
?.data?.items;
|
|
57
29
|
};
|
|
58
30
|
|
|
59
31
|
const getModelField = (modelName: string, fieldName: string): ModelFieldConfig => {
|
package/src/SegmentedControl.tsx
CHANGED
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
|
|
3
3
|
import {Box} from "./Box";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
SegmentedControlProps,
|
|
6
|
+
SegmentedControlPropsMultiSelect,
|
|
7
|
+
SegmentedControlPropsSingleSelect,
|
|
8
|
+
} from "./Common";
|
|
5
9
|
import {Text} from "./Text";
|
|
6
10
|
|
|
7
11
|
export const SegmentedControl = ({
|
|
8
12
|
items,
|
|
9
13
|
onChange = () => {},
|
|
10
|
-
selectedItemIndexes = undefined,
|
|
11
|
-
selectedItemIndex = undefined,
|
|
12
14
|
multiselect = false,
|
|
13
15
|
selectLimit = 1,
|
|
16
|
+
...props
|
|
14
17
|
}: SegmentedControlProps) => {
|
|
18
|
+
const selectedItemIndex = (props as SegmentedControlPropsSingleSelect).selectedItemIndex;
|
|
19
|
+
const selectedItemIndexes = (props as SegmentedControlPropsMultiSelect).selectedItemIndexes;
|
|
20
|
+
|
|
15
21
|
const renderItem = (item: string | React.ReactNode) => {
|
|
16
22
|
return (
|
|
17
23
|
<Text align="center" weight="bold">
|
|
@@ -81,15 +87,19 @@ export const SegmentedControl = ({
|
|
|
81
87
|
return;
|
|
82
88
|
}
|
|
83
89
|
if (multiselect) {
|
|
90
|
+
const typedOnChange =
|
|
91
|
+
onChange as unknown as SegmentedControlPropsMultiSelect["onChange"];
|
|
84
92
|
if (selectedItemIndexes?.includes(index)) {
|
|
85
|
-
|
|
93
|
+
typedOnChange({activeIndex: selectedItemIndexes.filter((i) => i !== index)});
|
|
86
94
|
} else {
|
|
87
95
|
const currentIndexes = [...(selectedItemIndexes as number[])];
|
|
88
96
|
currentIndexes?.push(index);
|
|
89
|
-
|
|
97
|
+
typedOnChange({activeIndex: currentIndexes?.sort() as number[]});
|
|
90
98
|
}
|
|
91
99
|
} else {
|
|
92
|
-
|
|
100
|
+
const typedOnChange =
|
|
101
|
+
onChange as unknown as SegmentedControlPropsSingleSelect["onChange"];
|
|
102
|
+
typedOnChange({activeIndex: index});
|
|
93
103
|
}
|
|
94
104
|
}}
|
|
95
105
|
>
|
package/src/TapToEdit.tsx
CHANGED
|
@@ -66,6 +66,7 @@ export const TapToEdit = ({
|
|
|
66
66
|
// openApiModel,
|
|
67
67
|
// openApiField,
|
|
68
68
|
showDescriptionAsTooltip = false,
|
|
69
|
+
onlyShowDescriptionWhileEditing = true,
|
|
69
70
|
...fieldProps
|
|
70
71
|
}: TapToEditProps): ReactElement => {
|
|
71
72
|
const [editing, setEditing] = useState(false);
|
|
@@ -189,7 +190,13 @@ export const TapToEdit = ({
|
|
|
189
190
|
return (
|
|
190
191
|
<Box flex="grow">
|
|
191
192
|
<Text weight="bold">{title}:</Text>
|
|
192
|
-
{Boolean(
|
|
193
|
+
{Boolean(
|
|
194
|
+
description && !showDescriptionAsTooltip && !onlyShowDescriptionWhileEditing
|
|
195
|
+
) && (
|
|
196
|
+
<Text color="gray" size="sm">
|
|
197
|
+
{description}
|
|
198
|
+
</Text>
|
|
199
|
+
)}
|
|
193
200
|
</Box>
|
|
194
201
|
);
|
|
195
202
|
};
|