react-iframe-bridge 2.0.2 → 2.1.0
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/lib/components/home/home.d.ts +4 -0
- package/lib/components/home/home.d.ts.map +1 -1
- package/lib/components/home/home.js +8 -7
- package/lib/components/home/home.js.map +1 -1
- package/lib/components/home/home_header.d.ts +5 -1
- package/lib/components/home/home_header.d.ts.map +1 -1
- package/lib/components/home/home_header.js +5 -2
- package/lib/components/home/home_header.js.map +1 -1
- package/lib/components/input.d.ts +1 -0
- package/lib/components/input.d.ts.map +1 -1
- package/lib/components/input.js +4 -3
- package/lib/components/input.js.map +1 -1
- package/package.json +1 -1
- package/src/components/home/home.tsx +20 -8
- package/src/components/home/home_header.tsx +15 -1
- package/src/components/input.tsx +4 -5
|
@@ -17,6 +17,10 @@ export interface HomeProps {
|
|
|
17
17
|
* Default path the iframe should load, if no path is found in local storage
|
|
18
18
|
*/
|
|
19
19
|
defaultPath?: string;
|
|
20
|
+
/**
|
|
21
|
+
* List of possible page paths. Used for autocomplete in the path input.
|
|
22
|
+
*/
|
|
23
|
+
pages?: string[];
|
|
20
24
|
/**
|
|
21
25
|
* Opt out of selecting a sample / selecting no sample before loading the iframe.
|
|
22
26
|
* The sample selection UI will be hidden and the iframe will automatically load without a selected sample.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../../src/components/home/home.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../../src/components/home/home.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,2CAgBpC"}
|
|
@@ -6,31 +6,32 @@ import HomeIframe from './home_iframe.js';
|
|
|
6
6
|
import HomeNoSample from './home_no_sample.js';
|
|
7
7
|
import HomeSamples from './home_samples.js';
|
|
8
8
|
export function Home(props) {
|
|
9
|
-
const { baseUrl, noSampleSelection, rocUrl, database, defaultPath } = props;
|
|
10
|
-
return (_jsx(HomeContextProvider, { rocUrl: rocUrl, database: database, defaultPath: defaultPath, children: _jsx(HomeInternal, { noSampleSelection: noSampleSelection, baseUrl: baseUrl }) }));
|
|
9
|
+
const { baseUrl, noSampleSelection, rocUrl, database, defaultPath, pages } = props;
|
|
10
|
+
return (_jsx(HomeContextProvider, { rocUrl: rocUrl, database: database, defaultPath: defaultPath, children: _jsx(HomeInternal, { noSampleSelection: noSampleSelection, baseUrl: baseUrl, pages: pages }) }));
|
|
11
11
|
}
|
|
12
12
|
function HomeInternal(props) {
|
|
13
|
+
const { noSampleSelection, baseUrl, pages } = props;
|
|
13
14
|
const homeDispatch = useHomeDispatchContext();
|
|
14
15
|
useEffect(() => {
|
|
15
|
-
if (
|
|
16
|
+
if (noSampleSelection) {
|
|
16
17
|
homeDispatch({
|
|
17
18
|
type: 'OPEN_NO_SAMPLE',
|
|
18
19
|
});
|
|
19
20
|
}
|
|
20
|
-
}, [
|
|
21
|
+
}, [noSampleSelection, homeDispatch]);
|
|
21
22
|
return (_jsxs("div", { style: {
|
|
22
23
|
display: 'flex',
|
|
23
24
|
flexDirection: 'column',
|
|
24
25
|
width: '100vw',
|
|
25
26
|
height: '100vh',
|
|
26
|
-
}, children: [_jsx(HomeHeader, {}), _jsxs("div", { style: {
|
|
27
|
+
}, children: [_jsx(HomeHeader, { pages: pages }), _jsxs("div", { style: {
|
|
27
28
|
marginTop: '0.5rem',
|
|
28
29
|
display: 'flex',
|
|
29
30
|
minHeight: 0,
|
|
30
31
|
flex: 1,
|
|
31
32
|
flexDirection: 'row',
|
|
32
33
|
borderTop: '1px solid #d1d5dc',
|
|
33
|
-
}, children: [!
|
|
34
|
+
}, children: [!noSampleSelection && (_jsxs("div", { style: {
|
|
34
35
|
display: 'flex',
|
|
35
36
|
width: '12rem',
|
|
36
37
|
flexDirection: 'column',
|
|
@@ -39,6 +40,6 @@ function HomeInternal(props) {
|
|
|
39
40
|
borderRight: '1px solid #d1d5dc',
|
|
40
41
|
paddingInline: '0.5rem',
|
|
41
42
|
paddingTop: '1rem',
|
|
42
|
-
}, children: [_jsx(HomeNoSample, {}), _jsx(HomeSamples, {})] })), _jsx(HomeIframe, { baseUrl:
|
|
43
|
+
}, children: [_jsx(HomeNoSample, {}), _jsx(HomeSamples, {})] })), _jsx(HomeIframe, { baseUrl: baseUrl })] })] }));
|
|
43
44
|
}
|
|
44
45
|
//# sourceMappingURL=home.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"home.js","sourceRoot":"","sources":["../../../src/components/home/home.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,WAAW,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"home.js","sourceRoot":"","sources":["../../../src/components/home/home.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAgC5C,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,GACxE,KAAK,CAAC;IACR,OAAO,CACL,KAAC,mBAAmB,IAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,YAExB,KAAC,YAAY,IACX,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACZ,GACkB,CACvB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,KAAiE;IAEjE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACpD,MAAM,YAAY,GAAG,sBAAsB,EAAE,CAAC;IAC9C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,iBAAiB,EAAE,CAAC;YACtB,YAAY,CAAC;gBACX,IAAI,EAAE,gBAAgB;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC,CAAC;IACtC,OAAO,CACL,eACE,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,OAAO;SAChB,aAED,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,GAAI,EAC5B,eACE,KAAK,EAAE;oBACL,SAAS,EAAE,QAAQ;oBACnB,OAAO,EAAE,MAAM;oBACf,SAAS,EAAE,CAAC;oBACZ,IAAI,EAAE,CAAC;oBACP,aAAa,EAAE,KAAK;oBACpB,SAAS,EAAE,mBAAmB;iBAC/B,aAEA,CAAC,iBAAiB,IAAI,CACrB,eACE,KAAK,EAAE;4BACL,OAAO,EAAE,MAAM;4BACf,KAAK,EAAE,OAAO;4BACd,aAAa,EAAE,QAAQ;4BACvB,GAAG,EAAE,SAAS;4BACd,QAAQ,EAAE,MAAM;4BAChB,WAAW,EAAE,mBAAmB;4BAChC,aAAa,EAAE,QAAQ;4BACvB,UAAU,EAAE,MAAM;yBACnB,aAED,KAAC,YAAY,KAAG,EAChB,KAAC,WAAW,KAAG,IACX,CACP,EACD,KAAC,UAAU,IAAC,OAAO,EAAE,OAAO,GAAI,IAC5B,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
interface HomeHeaderProps {
|
|
2
|
+
pages?: string[];
|
|
3
|
+
}
|
|
4
|
+
export default function HomeHeader(props: HomeHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export {};
|
|
2
6
|
//# sourceMappingURL=home_header.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"home_header.d.ts","sourceRoot":"","sources":["../../../src/components/home/home_header.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"home_header.d.ts","sourceRoot":"","sources":["../../../src/components/home/home_header.tsx"],"names":[],"mappings":"AAMA,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAAK,EAAE,eAAe,2CAgCxD"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId } from 'react';
|
|
2
3
|
import Input from '../input.js';
|
|
3
4
|
import { useHomeContext, useHomeDispatchContext } from './home_context.js';
|
|
4
|
-
export default function HomeHeader() {
|
|
5
|
+
export default function HomeHeader(props) {
|
|
6
|
+
const { pages = [] } = props;
|
|
5
7
|
const { rocUrl, database, iframePath } = useHomeContext();
|
|
6
8
|
const dispatch = useHomeDispatchContext();
|
|
9
|
+
const pageListId = useId();
|
|
7
10
|
return (_jsxs("header", { style: {
|
|
8
11
|
display: 'flex',
|
|
9
12
|
flexDirection: 'row',
|
|
@@ -11,6 +14,6 @@ export default function HomeHeader() {
|
|
|
11
14
|
padding: '0.5rem',
|
|
12
15
|
}, children: [_jsx(Input, { name: "rocUrl", style: { flex: 1 }, value: rocUrl, readOnly: true }), _jsx(Input, { name: "database", value: database, readOnly: true }), _jsx(Input, { name: "iframe-page", value: iframePath, style: { flex: 1 }, onChange: (event) => {
|
|
13
16
|
dispatch({ type: 'SET_IFRAME_PAGE', payload: event.target.value });
|
|
14
|
-
} })] }));
|
|
17
|
+
}, list: pageListId }), _jsx("datalist", { id: pageListId, children: pages.map((page) => (_jsx("option", { value: page }, page))) })] }));
|
|
15
18
|
}
|
|
16
19
|
//# sourceMappingURL=home_header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"home_header.js","sourceRoot":"","sources":["../../../src/components/home/home_header.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,aAAa,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"home_header.js","sourceRoot":"","sources":["../../../src/components/home/home_header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,KAAK,MAAM,aAAa,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAM3E,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAAsB;IACvD,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,cAAc,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,KAAK,EAAE,CAAC;IAC3B,OAAO,CACL,kBACE,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,KAAK;YACpB,GAAG,EAAE,MAAM;YACX,OAAO,EAAE,QAAQ;SAClB,aAED,KAAC,KAAK,IAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAG,EACnE,KAAC,KAAK,IAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,SAAG,EACnD,KAAC,KAAK,IACJ,IAAI,EAAC,aAAa,EAClB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClB,QAAQ,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrE,CAAC,EACD,IAAI,EAAE,UAAU,GAChB,EACF,mBAAU,EAAE,EAAE,UAAU,YACrB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,iBAAmB,KAAK,EAAE,IAAI,IAAjB,IAAI,CAAiB,CACnC,CAAC,GACO,IACJ,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/components/input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAExD,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/components/input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAExD,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,KAAK,EAAE,UAAU,2CAkB9C"}
|
package/lib/components/input.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
export default function Input(props) {
|
|
3
|
-
|
|
3
|
+
const { style, ...otherProps } = props;
|
|
4
|
+
return (_jsx("input", { type: "text", style: {
|
|
4
5
|
appearance: 'none',
|
|
5
6
|
border: '1px solid #4a5565',
|
|
6
7
|
backgroundColor: 'white',
|
|
@@ -8,7 +9,7 @@ export default function Input(props) {
|
|
|
8
9
|
paddingBlock: '0.5rem',
|
|
9
10
|
fontSize: '1rem',
|
|
10
11
|
lineHeight: 1,
|
|
11
|
-
...
|
|
12
|
-
},
|
|
12
|
+
...style,
|
|
13
|
+
}, ...otherProps }));
|
|
13
14
|
}
|
|
14
15
|
//# sourceMappingURL=input.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/components/input.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/components/input.tsx"],"names":[],"mappings":";AAWA,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,KAAiB;IAC7C,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,CAAC;IACvC,OAAO,CACL,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE;YACL,UAAU,EAAE,MAAM;YAClB,MAAM,EAAE,mBAAmB;YAC3B,eAAe,EAAE,OAAO;YACxB,aAAa,EAAE,SAAS;YACxB,YAAY,EAAE,QAAQ;YACtB,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,CAAC;YACb,GAAG,KAAK;SACT,KACG,UAAU,GACd,CACH,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -25,6 +25,10 @@ export interface HomeProps {
|
|
|
25
25
|
* Default path the iframe should load, if no path is found in local storage
|
|
26
26
|
*/
|
|
27
27
|
defaultPath?: string;
|
|
28
|
+
/**
|
|
29
|
+
* List of possible page paths. Used for autocomplete in the path input.
|
|
30
|
+
*/
|
|
31
|
+
pages?: string[];
|
|
28
32
|
/**
|
|
29
33
|
* Opt out of selecting a sample / selecting no sample before loading the iframe.
|
|
30
34
|
* The sample selection UI will be hidden and the iframe will automatically load without a selected sample.
|
|
@@ -33,27 +37,35 @@ export interface HomeProps {
|
|
|
33
37
|
}
|
|
34
38
|
|
|
35
39
|
export function Home(props: HomeProps) {
|
|
36
|
-
const { baseUrl, noSampleSelection, rocUrl, database, defaultPath } =
|
|
40
|
+
const { baseUrl, noSampleSelection, rocUrl, database, defaultPath, pages } =
|
|
41
|
+
props;
|
|
37
42
|
return (
|
|
38
43
|
<HomeContextProvider
|
|
39
44
|
rocUrl={rocUrl}
|
|
40
45
|
database={database}
|
|
41
46
|
defaultPath={defaultPath}
|
|
42
47
|
>
|
|
43
|
-
<HomeInternal
|
|
48
|
+
<HomeInternal
|
|
49
|
+
noSampleSelection={noSampleSelection}
|
|
50
|
+
baseUrl={baseUrl}
|
|
51
|
+
pages={pages}
|
|
52
|
+
/>
|
|
44
53
|
</HomeContextProvider>
|
|
45
54
|
);
|
|
46
55
|
}
|
|
47
56
|
|
|
48
|
-
function HomeInternal(
|
|
57
|
+
function HomeInternal(
|
|
58
|
+
props: Pick<HomeProps, 'baseUrl' | 'noSampleSelection' | 'pages'>,
|
|
59
|
+
) {
|
|
60
|
+
const { noSampleSelection, baseUrl, pages } = props;
|
|
49
61
|
const homeDispatch = useHomeDispatchContext();
|
|
50
62
|
useEffect(() => {
|
|
51
|
-
if (
|
|
63
|
+
if (noSampleSelection) {
|
|
52
64
|
homeDispatch({
|
|
53
65
|
type: 'OPEN_NO_SAMPLE',
|
|
54
66
|
});
|
|
55
67
|
}
|
|
56
|
-
}, [
|
|
68
|
+
}, [noSampleSelection, homeDispatch]);
|
|
57
69
|
return (
|
|
58
70
|
<div
|
|
59
71
|
style={{
|
|
@@ -63,7 +75,7 @@ function HomeInternal(props: Pick<HomeProps, 'baseUrl' | 'noSampleSelection'>) {
|
|
|
63
75
|
height: '100vh',
|
|
64
76
|
}}
|
|
65
77
|
>
|
|
66
|
-
<HomeHeader />
|
|
78
|
+
<HomeHeader pages={pages} />
|
|
67
79
|
<div
|
|
68
80
|
style={{
|
|
69
81
|
marginTop: '0.5rem',
|
|
@@ -74,7 +86,7 @@ function HomeInternal(props: Pick<HomeProps, 'baseUrl' | 'noSampleSelection'>) {
|
|
|
74
86
|
borderTop: '1px solid #d1d5dc',
|
|
75
87
|
}}
|
|
76
88
|
>
|
|
77
|
-
{!
|
|
89
|
+
{!noSampleSelection && (
|
|
78
90
|
<div
|
|
79
91
|
style={{
|
|
80
92
|
display: 'flex',
|
|
@@ -91,7 +103,7 @@ function HomeInternal(props: Pick<HomeProps, 'baseUrl' | 'noSampleSelection'>) {
|
|
|
91
103
|
<HomeSamples />
|
|
92
104
|
</div>
|
|
93
105
|
)}
|
|
94
|
-
<HomeIframe baseUrl={
|
|
106
|
+
<HomeIframe baseUrl={baseUrl} />
|
|
95
107
|
</div>
|
|
96
108
|
</div>
|
|
97
109
|
);
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
+
import { useId } from 'react';
|
|
2
|
+
|
|
1
3
|
import Input from '../input.js';
|
|
2
4
|
|
|
3
5
|
import { useHomeContext, useHomeDispatchContext } from './home_context.js';
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
interface HomeHeaderProps {
|
|
8
|
+
pages?: string[];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export default function HomeHeader(props: HomeHeaderProps) {
|
|
12
|
+
const { pages = [] } = props;
|
|
6
13
|
const { rocUrl, database, iframePath } = useHomeContext();
|
|
7
14
|
const dispatch = useHomeDispatchContext();
|
|
15
|
+
const pageListId = useId();
|
|
8
16
|
return (
|
|
9
17
|
<header
|
|
10
18
|
style={{
|
|
@@ -23,7 +31,13 @@ export default function HomeHeader() {
|
|
|
23
31
|
onChange={(event) => {
|
|
24
32
|
dispatch({ type: 'SET_IFRAME_PAGE', payload: event.target.value });
|
|
25
33
|
}}
|
|
34
|
+
list={pageListId}
|
|
26
35
|
/>
|
|
36
|
+
<datalist id={pageListId}>
|
|
37
|
+
{pages.map((page) => (
|
|
38
|
+
<option key={page} value={page} />
|
|
39
|
+
))}
|
|
40
|
+
</datalist>
|
|
27
41
|
</header>
|
|
28
42
|
);
|
|
29
43
|
}
|
package/src/components/input.tsx
CHANGED
|
@@ -6,12 +6,13 @@ interface InputProps {
|
|
|
6
6
|
value: string;
|
|
7
7
|
readOnly?: boolean;
|
|
8
8
|
onChange?: (event: ChangeEvent<HTMLInputElement>) => void;
|
|
9
|
+
list?: string;
|
|
9
10
|
}
|
|
10
11
|
|
|
11
12
|
export default function Input(props: InputProps) {
|
|
13
|
+
const { style, ...otherProps } = props;
|
|
12
14
|
return (
|
|
13
15
|
<input
|
|
14
|
-
name={props.name}
|
|
15
16
|
type="text"
|
|
16
17
|
style={{
|
|
17
18
|
appearance: 'none',
|
|
@@ -21,11 +22,9 @@ export default function Input(props: InputProps) {
|
|
|
21
22
|
paddingBlock: '0.5rem',
|
|
22
23
|
fontSize: '1rem',
|
|
23
24
|
lineHeight: 1,
|
|
24
|
-
...
|
|
25
|
+
...style,
|
|
25
26
|
}}
|
|
26
|
-
|
|
27
|
-
readOnly={props.readOnly}
|
|
28
|
-
onChange={props.onChange}
|
|
27
|
+
{...otherProps}
|
|
29
28
|
/>
|
|
30
29
|
);
|
|
31
30
|
}
|