@saltcorn/builder 0.9.4-beta.5 → 0.9.4-beta.7
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/builder_bundle.js +8 -8
- package/package.json +1 -1
- package/src/components/Builder.js +31 -9
- package/src/components/Library.js +6 -14
- package/src/components/Toolbox.js +112 -163
- package/src/components/elements/Columns.js +1 -1
- package/src/components/elements/Tabs.js +1 -1
- package/src/components/elements/utils.js +8 -0
package/package.json
CHANGED
|
@@ -396,8 +396,8 @@ const Builder = ({ options, layout, mode }) => {
|
|
|
396
396
|
const nodekeys = useRef([]);
|
|
397
397
|
const [isSaving, setIsSaving] = useState(false);
|
|
398
398
|
const [isEnlarged, setIsEnlarged] = useState(false);
|
|
399
|
+
const [isLeftEnlarged, setIsLeftEnlarged] = useState(false);
|
|
399
400
|
const [relationsCache, setRelationsCache] = useState({});
|
|
400
|
-
|
|
401
401
|
return (
|
|
402
402
|
<ErrorBoundary>
|
|
403
403
|
<Editor onRender={RenderNode}>
|
|
@@ -412,7 +412,13 @@ const Builder = ({ options, layout, mode }) => {
|
|
|
412
412
|
}}
|
|
413
413
|
>
|
|
414
414
|
<div className="row" style={{ marginTop: "-5px" }}>
|
|
415
|
-
<div
|
|
415
|
+
<div
|
|
416
|
+
className={`col-sm-auto left-builder-col ${
|
|
417
|
+
isLeftEnlarged
|
|
418
|
+
? "builder-left-enlarged"
|
|
419
|
+
: "builder-left-shrunk"
|
|
420
|
+
}`}
|
|
421
|
+
>
|
|
416
422
|
<div className="componets-and-library-accordion toolbox-card">
|
|
417
423
|
<InitNewElement
|
|
418
424
|
nodekeys={nodekeys}
|
|
@@ -421,19 +427,34 @@ const Builder = ({ options, layout, mode }) => {
|
|
|
421
427
|
<Accordion>
|
|
422
428
|
<div className="card mt-1" accordiontitle="Components">
|
|
423
429
|
{{
|
|
424
|
-
show: <ToolboxShow />,
|
|
425
|
-
edit: <ToolboxEdit />,
|
|
426
|
-
page: <ToolboxPage />,
|
|
427
|
-
filter: <ToolboxFilter />,
|
|
430
|
+
show: <ToolboxShow expanded={isLeftEnlarged} />,
|
|
431
|
+
edit: <ToolboxEdit expanded={isLeftEnlarged} />,
|
|
432
|
+
page: <ToolboxPage expanded={isLeftEnlarged} />,
|
|
433
|
+
filter: <ToolboxFilter expanded={isLeftEnlarged} />,
|
|
428
434
|
}[mode] || <div>Missing mode</div>}
|
|
429
435
|
</div>
|
|
430
436
|
<div accordiontitle="Library">
|
|
431
|
-
<Library />
|
|
437
|
+
<Library expanded={isLeftEnlarged} />
|
|
432
438
|
</div>
|
|
433
439
|
</Accordion>
|
|
434
440
|
</div>
|
|
435
|
-
<div
|
|
436
|
-
|
|
441
|
+
<div
|
|
442
|
+
className="card toolbox-card pe-0"
|
|
443
|
+
style={isLeftEnlarged ? { width: "12.35rem" } : {}}
|
|
444
|
+
>
|
|
445
|
+
<div className="card-header p-2 d-flex justify-content-between">
|
|
446
|
+
<div>Layers</div>
|
|
447
|
+
<FontAwesomeIcon
|
|
448
|
+
icon={
|
|
449
|
+
isLeftEnlarged
|
|
450
|
+
? faCaretSquareLeft
|
|
451
|
+
: faCaretSquareRight
|
|
452
|
+
}
|
|
453
|
+
className={"float-end fa-lg"}
|
|
454
|
+
onClick={() => setIsLeftEnlarged(!isLeftEnlarged)}
|
|
455
|
+
title={isLeftEnlarged ? "Shrink" : "Enlarge"}
|
|
456
|
+
/>
|
|
457
|
+
</div>
|
|
437
458
|
{showLayers && (
|
|
438
459
|
<div className="card-body p-0 builder-layers">
|
|
439
460
|
<Layers expandRootOnLoad={true} />
|
|
@@ -488,6 +509,7 @@ const Builder = ({ options, layout, mode }) => {
|
|
|
488
509
|
icon={isEnlarged ? faCaretSquareRight : faCaretSquareLeft}
|
|
489
510
|
className={"float-end me-2 mt-1 fa-lg"}
|
|
490
511
|
onClick={() => setIsEnlarged(!isEnlarged)}
|
|
512
|
+
title={isEnlarged ? "Shrink" : "Enlarge"}
|
|
491
513
|
/>
|
|
492
514
|
|
|
493
515
|
<SettingsPanel />
|
|
@@ -20,18 +20,7 @@ import faIcons from "./elements/faicons";
|
|
|
20
20
|
import { craftToSaltcorn, layoutToNodes } from "./storage";
|
|
21
21
|
import optionsCtx from "./context";
|
|
22
22
|
import { WrapElem } from "./Toolbox";
|
|
23
|
-
import { isEqual, throttle } from "lodash";
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
*
|
|
27
|
-
* @param {object[]} xs
|
|
28
|
-
* @returns {object[]}
|
|
29
|
-
*/
|
|
30
|
-
const twoByTwos = (xs) => {
|
|
31
|
-
if (xs.length <= 2) return [xs];
|
|
32
|
-
const [x, y, ...rest] = xs;
|
|
33
|
-
return [[x, y], ...twoByTwos(rest)];
|
|
34
|
-
};
|
|
23
|
+
import { isEqual, throttle, chunk } from "lodash";
|
|
35
24
|
|
|
36
25
|
export /**
|
|
37
26
|
* @param {object} props
|
|
@@ -184,7 +173,7 @@ export /**
|
|
|
184
173
|
* @subcategory components
|
|
185
174
|
* @namespace
|
|
186
175
|
*/
|
|
187
|
-
const Library = () => {
|
|
176
|
+
const Library = ({ expanded }) => {
|
|
188
177
|
const { actions, selected, query, connectors } = useEditor((state, query) => {
|
|
189
178
|
return {
|
|
190
179
|
selected: state.events.selected,
|
|
@@ -216,7 +205,10 @@ const Library = () => {
|
|
|
216
205
|
setRecent([...recent, data]);
|
|
217
206
|
};
|
|
218
207
|
|
|
219
|
-
const elemRows =
|
|
208
|
+
const elemRows = chunk(
|
|
209
|
+
[...(options.library || []), ...recent],
|
|
210
|
+
expanded ? 3 : 2
|
|
211
|
+
);
|
|
220
212
|
return (
|
|
221
213
|
<div className="builder-library">
|
|
222
214
|
<div className="dropdown">
|
|
@@ -35,6 +35,7 @@ import {
|
|
|
35
35
|
SegmentedNav,
|
|
36
36
|
TextareaT,
|
|
37
37
|
} from "react-bootstrap-icons";
|
|
38
|
+
import { chunk } from "lodash";
|
|
38
39
|
|
|
39
40
|
/**
|
|
40
41
|
*
|
|
@@ -510,13 +511,24 @@ const TableElem = ({ connectors }) => (
|
|
|
510
511
|
</WrapElem>
|
|
511
512
|
);
|
|
512
513
|
|
|
514
|
+
const chunkToolBox = (elems, expanded) => {
|
|
515
|
+
const chunks = chunk(elems, expanded ? 3 : 2);
|
|
516
|
+
return chunks.map((es, ix) => (
|
|
517
|
+
<div className="toolbar-row" key={ix}>
|
|
518
|
+
{es.map((e, j) => (
|
|
519
|
+
<Fragment key={j}>{e}</Fragment>
|
|
520
|
+
))}
|
|
521
|
+
</div>
|
|
522
|
+
));
|
|
523
|
+
};
|
|
524
|
+
|
|
513
525
|
export /**
|
|
514
526
|
* @returns {Fragment}
|
|
515
527
|
* @category saltcorn-builder
|
|
516
528
|
* @subcategory components / Toolbox
|
|
517
529
|
* @namespace
|
|
518
530
|
*/
|
|
519
|
-
const ToolboxShow = () => {
|
|
531
|
+
const ToolboxShow = ({ expanded }) => {
|
|
520
532
|
const { connectors, query } = useEditor();
|
|
521
533
|
const options = useContext(optionsCtx);
|
|
522
534
|
const {
|
|
@@ -527,52 +539,35 @@ const ToolboxShow = () => {
|
|
|
527
539
|
views,
|
|
528
540
|
images,
|
|
529
541
|
} = options;
|
|
530
|
-
return (
|
|
531
|
-
|
|
532
|
-
<
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
<
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
<
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
</div>
|
|
560
|
-
<div className="toolbar-row">
|
|
561
|
-
<ContainerElem connectors={connectors} />
|
|
562
|
-
<CardElem connectors={connectors} />
|
|
563
|
-
</div>
|
|
564
|
-
<div className="toolbar-row">
|
|
565
|
-
<TabsElem connectors={connectors} />
|
|
566
|
-
<ImageElem connectors={connectors} images={images} />
|
|
567
|
-
</div>
|
|
568
|
-
<div className="toolbar-row">
|
|
569
|
-
<HTMLElem connectors={connectors} />
|
|
570
|
-
<DropMenuElem connectors={connectors} />
|
|
571
|
-
</div>
|
|
572
|
-
<div className="toolbar-row">
|
|
573
|
-
<TableElem connectors={connectors} />
|
|
574
|
-
</div>
|
|
575
|
-
</Fragment>
|
|
542
|
+
return chunkToolBox(
|
|
543
|
+
[
|
|
544
|
+
<TextElem connectors={connectors} />,
|
|
545
|
+
<ColumnsElem connectors={connectors} />,
|
|
546
|
+
<FieldElem
|
|
547
|
+
connectors={connectors}
|
|
548
|
+
fields={fields}
|
|
549
|
+
field_view_options={field_view_options}
|
|
550
|
+
/>,
|
|
551
|
+
<LineBreakElem connectors={connectors} />,
|
|
552
|
+
<JoinFieldElem connectors={connectors} options={options} />,
|
|
553
|
+
<ViewLinkElem connectors={connectors} options={options} />,
|
|
554
|
+
<ActionElem connectors={connectors} options={options} />,
|
|
555
|
+
<LinkElem connectors={connectors} />,
|
|
556
|
+
<AggregationElem
|
|
557
|
+
connectors={connectors}
|
|
558
|
+
child_field_list={child_field_list}
|
|
559
|
+
agg_field_opts={agg_field_opts}
|
|
560
|
+
/>,
|
|
561
|
+
<ViewElem connectors={connectors} views={views} />,
|
|
562
|
+
<ContainerElem connectors={connectors} />,
|
|
563
|
+
<CardElem connectors={connectors} />,
|
|
564
|
+
<TabsElem connectors={connectors} />,
|
|
565
|
+
<ImageElem connectors={connectors} images={images} />,
|
|
566
|
+
<HTMLElem connectors={connectors} />,
|
|
567
|
+
<DropMenuElem connectors={connectors} />,
|
|
568
|
+
<TableElem connectors={connectors} />,
|
|
569
|
+
],
|
|
570
|
+
expanded
|
|
576
571
|
);
|
|
577
572
|
};
|
|
578
573
|
|
|
@@ -582,50 +577,34 @@ export /**
|
|
|
582
577
|
* @subcategory components / Toolbox
|
|
583
578
|
* @namespace
|
|
584
579
|
*/
|
|
585
|
-
const ToolboxFilter = () => {
|
|
580
|
+
const ToolboxFilter = ({ expanded }) => {
|
|
586
581
|
const { connectors, query } = useEditor();
|
|
587
582
|
const options = useContext(optionsCtx);
|
|
588
583
|
const { fields, views, field_view_options } = options;
|
|
589
|
-
return (
|
|
590
|
-
|
|
591
|
-
<
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
<
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
<
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
<CardElem connectors={connectors} />
|
|
615
|
-
</div>
|
|
616
|
-
<div className="toolbar-row">
|
|
617
|
-
<TabsElem connectors={connectors} />
|
|
618
|
-
<ViewElem connectors={connectors} views={views} />
|
|
619
|
-
</div>
|
|
620
|
-
<div className="toolbar-row">
|
|
621
|
-
<HTMLElem connectors={connectors} />
|
|
622
|
-
<LinkElem connectors={connectors} />
|
|
623
|
-
</div>
|
|
624
|
-
<div className="toolbar-row">
|
|
625
|
-
<TableElem connectors={connectors} />
|
|
626
|
-
<DropMenuElem connectors={connectors} />
|
|
627
|
-
</div>
|
|
628
|
-
</Fragment>
|
|
584
|
+
return chunkToolBox(
|
|
585
|
+
[
|
|
586
|
+
<TextElem connectors={connectors} />,
|
|
587
|
+
<ColumnsElem connectors={connectors} />,
|
|
588
|
+
<FieldElem
|
|
589
|
+
connectors={connectors}
|
|
590
|
+
fields={fields}
|
|
591
|
+
field_view_options={field_view_options}
|
|
592
|
+
/>,
|
|
593
|
+
<LineBreakElem connectors={connectors} />,
|
|
594
|
+
<DropDownFilterElem connectors={connectors} fields={fields} />,
|
|
595
|
+
<ToggleFilterElem connectors={connectors} fields={fields} />,
|
|
596
|
+
<SearchElem connectors={connectors} />,
|
|
597
|
+
<ActionElem connectors={connectors} options={options} />,
|
|
598
|
+
<ContainerElem connectors={connectors} />,
|
|
599
|
+
<CardElem connectors={connectors} />,
|
|
600
|
+
<TabsElem connectors={connectors} />,
|
|
601
|
+
<ViewElem connectors={connectors} views={views} />,
|
|
602
|
+
<HTMLElem connectors={connectors} />,
|
|
603
|
+
<LinkElem connectors={connectors} />,
|
|
604
|
+
<TableElem connectors={connectors} />,
|
|
605
|
+
<DropMenuElem connectors={connectors} />,
|
|
606
|
+
],
|
|
607
|
+
expanded
|
|
629
608
|
);
|
|
630
609
|
};
|
|
631
610
|
|
|
@@ -635,49 +614,34 @@ export /**
|
|
|
635
614
|
* @subcategory components / Toolbox
|
|
636
615
|
* @namespace
|
|
637
616
|
*/
|
|
638
|
-
const ToolboxEdit = () => {
|
|
617
|
+
const ToolboxEdit = ({ expanded }) => {
|
|
639
618
|
const { connectors, query } = useEditor();
|
|
640
619
|
const options = useContext(optionsCtx);
|
|
641
620
|
const { fields, field_view_options, images, views } = options;
|
|
642
|
-
return (
|
|
643
|
-
|
|
644
|
-
<
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
<
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
<
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
<ImageElem connectors={connectors} images={images} />
|
|
667
|
-
</div>
|
|
668
|
-
<div className="toolbar-row">
|
|
669
|
-
<HTMLElem connectors={connectors} />
|
|
670
|
-
<ViewElem connectors={connectors} views={views} />
|
|
671
|
-
</div>
|
|
672
|
-
<div className="toolbar-row">
|
|
673
|
-
<JoinFieldElem connectors={connectors} options={options} />
|
|
674
|
-
<DropMenuElem connectors={connectors} />
|
|
675
|
-
</div>
|
|
676
|
-
<div className="toolbar-row">
|
|
677
|
-
<TableElem connectors={connectors} />
|
|
678
|
-
<ViewLinkElem connectors={connectors} options={options} />
|
|
679
|
-
</div>
|
|
680
|
-
</Fragment>
|
|
621
|
+
return chunkToolBox(
|
|
622
|
+
[
|
|
623
|
+
<TextElem connectors={connectors} />,
|
|
624
|
+
<ColumnsElem connectors={connectors} />,
|
|
625
|
+
<FieldElem
|
|
626
|
+
connectors={connectors}
|
|
627
|
+
fields={fields}
|
|
628
|
+
field_view_options={field_view_options}
|
|
629
|
+
/>,
|
|
630
|
+
<LineBreakElem connectors={connectors} />,
|
|
631
|
+
<ActionElem connectors={connectors} options={options} />,
|
|
632
|
+
<ContainerElem connectors={connectors} />,
|
|
633
|
+
<CardElem connectors={connectors} />,
|
|
634
|
+
<TabsElem connectors={connectors} />,
|
|
635
|
+
<LinkElem connectors={connectors} />,
|
|
636
|
+
<ImageElem connectors={connectors} images={images} />,
|
|
637
|
+
<HTMLElem connectors={connectors} />,
|
|
638
|
+
<ViewElem connectors={connectors} views={views} />,
|
|
639
|
+
<JoinFieldElem connectors={connectors} options={options} />,
|
|
640
|
+
<DropMenuElem connectors={connectors} />,
|
|
641
|
+
<TableElem connectors={connectors} />,
|
|
642
|
+
<ViewLinkElem connectors={connectors} options={options} />,
|
|
643
|
+
],
|
|
644
|
+
expanded
|
|
681
645
|
);
|
|
682
646
|
};
|
|
683
647
|
|
|
@@ -687,43 +651,28 @@ export /**
|
|
|
687
651
|
* @subcategory components / Toolbox
|
|
688
652
|
* @namespace
|
|
689
653
|
*/
|
|
690
|
-
const ToolboxPage = () => {
|
|
654
|
+
const ToolboxPage = ({ expanded }) => {
|
|
691
655
|
const { connectors, query } = useEditor();
|
|
692
656
|
const options = useContext(optionsCtx);
|
|
693
657
|
const { views, pages, images } = options;
|
|
694
|
-
return (
|
|
695
|
-
|
|
696
|
-
<
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
<
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
<
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
<
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
<SearchElem connectors={connectors} />
|
|
714
|
-
<ActionElem connectors={connectors} options={options} />
|
|
715
|
-
</div>
|
|
716
|
-
<div className="toolbar-row">
|
|
717
|
-
<ContainerElem connectors={connectors} />
|
|
718
|
-
<TabsElem connectors={connectors} />
|
|
719
|
-
</div>
|
|
720
|
-
<div className="toolbar-row">
|
|
721
|
-
<DropMenuElem connectors={connectors} />
|
|
722
|
-
<PageElem connectors={connectors} pages={pages} />
|
|
723
|
-
</div>
|
|
724
|
-
<div className="toolbar-row">
|
|
725
|
-
<TableElem connectors={connectors} />
|
|
726
|
-
</div>
|
|
727
|
-
</Fragment>
|
|
658
|
+
return chunkToolBox(
|
|
659
|
+
[
|
|
660
|
+
<TextElem connectors={connectors} />,
|
|
661
|
+
<ColumnsElem connectors={connectors} />,
|
|
662
|
+
<LineBreakElem connectors={connectors} />,
|
|
663
|
+
<HTMLElem connectors={connectors} />,
|
|
664
|
+
<CardElem connectors={connectors} />,
|
|
665
|
+
<ImageElem connectors={connectors} images={images} />,
|
|
666
|
+
<LinkElem connectors={connectors} />,
|
|
667
|
+
<ViewElem connectors={connectors} views={views} isPageEdit={true} />,
|
|
668
|
+
<SearchElem connectors={connectors} />,
|
|
669
|
+
<ActionElem connectors={connectors} options={options} />,
|
|
670
|
+
<ContainerElem connectors={connectors} />,
|
|
671
|
+
<TabsElem connectors={connectors} />,
|
|
672
|
+
<DropMenuElem connectors={connectors} />,
|
|
673
|
+
<PageElem connectors={connectors} pages={pages} />,
|
|
674
|
+
<TableElem connectors={connectors} />,
|
|
675
|
+
],
|
|
676
|
+
expanded
|
|
728
677
|
);
|
|
729
678
|
};
|
|
@@ -1505,6 +1505,14 @@ export const buildBootstrapOptions = (values) => {
|
|
|
1505
1505
|
));
|
|
1506
1506
|
};
|
|
1507
1507
|
|
|
1508
|
+
export const arrayChunks = (xs, n) => {
|
|
1509
|
+
const arrayOfArrays = [];
|
|
1510
|
+
for (var i = 0; i < bigarray.length; i += n) {
|
|
1511
|
+
arrayOfArrays.push(bigarray.slice(i, i + n));
|
|
1512
|
+
}
|
|
1513
|
+
return arrayOfArrays;
|
|
1514
|
+
};
|
|
1515
|
+
|
|
1508
1516
|
export const prepCacheAndFinder = ({
|
|
1509
1517
|
tables,
|
|
1510
1518
|
views,
|