@saltcorn/builder 0.9.4-beta.2 → 0.9.4-beta.20

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.
@@ -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
  *
@@ -489,7 +490,7 @@ const AggregationElem = ({ connectors, child_field_list, agg_field_opts }) => (
489
490
  >
490
491
  <Aggregation
491
492
  agg_relation={child_field_list[0]}
492
- agg_field={headOr(agg_field_opts[child_field_list[0]], "")}
493
+ agg_field={headOr(agg_field_opts[child_field_list[0]], "")?.name}
493
494
  stat={"Count"}
494
495
  textStyle={""}
495
496
  aggwhere={""}
@@ -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,105 +539,131 @@ const ToolboxShow = () => {
527
539
  views,
528
540
  images,
529
541
  } = options;
530
- return (
531
- <Fragment>
532
- <div className="toolbar-row">
533
- <TextElem connectors={connectors} />
534
- <ColumnsElem connectors={connectors} />
535
- </div>
536
- <div className="toolbar-row">
537
- <FieldElem
538
- connectors={connectors}
539
- fields={fields}
540
- field_view_options={field_view_options}
541
- />
542
- <LineBreakElem connectors={connectors} />
543
- </div>
544
- <div className="toolbar-row">
545
- <JoinFieldElem connectors={connectors} options={options} />
546
- <ViewLinkElem connectors={connectors} options={options} />
547
- </div>
548
- <div className="toolbar-row">
549
- <ActionElem connectors={connectors} options={options} />
550
- <LinkElem connectors={connectors} />
551
- </div>
552
- <div className="toolbar-row">
553
- <AggregationElem
554
- connectors={connectors}
555
- child_field_list={child_field_list}
556
- agg_field_opts={agg_field_opts}
557
- />
558
- <ViewElem connectors={connectors} views={views} />
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
-
579
573
  export /**
580
574
  * @returns {Fragment}
581
575
  * @category saltcorn-builder
582
576
  * @subcategory components / Toolbox
583
577
  * @namespace
584
578
  */
585
- const ToolboxFilter = () => {
579
+ const ToolboxList = ({ expanded }) => {
586
580
  const { connectors, query } = useEditor();
587
581
  const options = useContext(optionsCtx);
588
- const { fields, views, field_view_options } = options;
589
- return (
590
- <Fragment>
591
- <div className="toolbar-row">
592
- <TextElem connectors={connectors} />
593
- <ColumnsElem connectors={connectors} />
594
- </div>
595
- <div className="toolbar-row">
596
- <FieldElem
597
- connectors={connectors}
598
- fields={fields}
599
- field_view_options={field_view_options}
600
- />
601
- <LineBreakElem connectors={connectors} />
602
- </div>
603
- <div className="toolbar-row">
604
- <DropDownFilterElem connectors={connectors} fields={fields} />
605
- <ToggleFilterElem connectors={connectors} fields={fields} />
606
- </div>
607
- <div className="toolbar-row">
608
- <SearchElem connectors={connectors} />
609
- <ActionElem connectors={connectors} options={options} />
610
- </div>
611
- <div className="toolbar-row">
612
- <ContainerElem connectors={connectors} />
582
+ const {
583
+ fields,
584
+ field_view_options,
585
+ child_field_list,
586
+ agg_field_opts,
587
+ views,
588
+ images,
589
+ } = options;
590
+ return chunkToolBox(
591
+ [
592
+ <TextElem connectors={connectors} />,
593
+ <FieldElem
594
+ connectors={connectors}
595
+ fields={fields}
596
+ field_view_options={field_view_options}
597
+ />,
598
+ <JoinFieldElem connectors={connectors} options={options} />,
599
+ <ViewLinkElem connectors={connectors} options={options} />,
600
+ <ActionElem connectors={connectors} options={options} />,
601
+ <LinkElem connectors={connectors} />,
602
+ <AggregationElem
603
+ connectors={connectors}
604
+ child_field_list={child_field_list}
605
+ agg_field_opts={agg_field_opts}
606
+ />,
607
+ // <ViewElem connectors={connectors} views={views} />,
608
+ // <ContainerElem connectors={connectors} />,
609
+ // <CardElem connectors={connectors} />,
610
+ // <TabsElem connectors={connectors} />,
611
+ <HTMLElem connectors={connectors} />,
612
+ <DropMenuElem connectors={connectors} />,
613
+ // <TableElem connectors={connectors} />,
614
+ ...(options.allowMultipleElementsPerColumn
615
+ ? [<LineBreakElem connectors={connectors} />]
616
+ : []),
617
+ ],
618
+ expanded
619
+ );
620
+ };
613
621
 
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>
622
+ export /**
623
+ * @returns {Fragment}
624
+ * @category saltcorn-builder
625
+ * @subcategory components / Toolbox
626
+ * @namespace
627
+ */
628
+ const ToolboxFilter = ({ expanded }) => {
629
+ const { connectors, query } = useEditor();
630
+ const options = useContext(optionsCtx);
631
+ const {
632
+ fields,
633
+ views,
634
+ field_view_options,
635
+ child_field_list,
636
+ agg_field_opts,
637
+ } = options;
638
+ return chunkToolBox(
639
+ [
640
+ <TextElem connectors={connectors} />,
641
+ <ColumnsElem connectors={connectors} />,
642
+ <FieldElem
643
+ connectors={connectors}
644
+ fields={fields}
645
+ field_view_options={field_view_options}
646
+ />,
647
+ <LineBreakElem connectors={connectors} />,
648
+ <DropDownFilterElem connectors={connectors} fields={fields} />,
649
+ <ToggleFilterElem connectors={connectors} fields={fields} />,
650
+ <SearchElem connectors={connectors} />,
651
+ <ActionElem connectors={connectors} options={options} />,
652
+ <AggregationElem
653
+ connectors={connectors}
654
+ child_field_list={child_field_list}
655
+ agg_field_opts={agg_field_opts}
656
+ />,
657
+ <ContainerElem connectors={connectors} />,
658
+ <CardElem connectors={connectors} />,
659
+ <TabsElem connectors={connectors} />,
660
+ <ViewElem connectors={connectors} views={views} />,
661
+ <HTMLElem connectors={connectors} />,
662
+ <LinkElem connectors={connectors} />,
663
+ <TableElem connectors={connectors} />,
664
+ <DropMenuElem connectors={connectors} />,
665
+ ],
666
+ expanded
629
667
  );
630
668
  };
631
669
 
@@ -635,49 +673,34 @@ export /**
635
673
  * @subcategory components / Toolbox
636
674
  * @namespace
637
675
  */
638
- const ToolboxEdit = () => {
676
+ const ToolboxEdit = ({ expanded }) => {
639
677
  const { connectors, query } = useEditor();
640
678
  const options = useContext(optionsCtx);
641
679
  const { fields, field_view_options, images, views } = options;
642
- return (
643
- <Fragment>
644
- <div className="toolbar-row">
645
- <TextElem connectors={connectors} />
646
- <ColumnsElem connectors={connectors} />
647
- </div>
648
- <div className="toolbar-row">
649
- <FieldElem
650
- connectors={connectors}
651
- fields={fields}
652
- field_view_options={field_view_options}
653
- />
654
- <LineBreakElem connectors={connectors} />
655
- </div>
656
- <div className="toolbar-row">
657
- <ActionElem connectors={connectors} options={options} />
658
- <ContainerElem connectors={connectors} />
659
- </div>
660
- <div className="toolbar-row">
661
- <CardElem connectors={connectors} />
662
- <TabsElem connectors={connectors} />
663
- </div>
664
- <div className="toolbar-row">
665
- <LinkElem connectors={connectors} />
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>
680
+ return chunkToolBox(
681
+ [
682
+ <TextElem connectors={connectors} />,
683
+ <ColumnsElem connectors={connectors} />,
684
+ <FieldElem
685
+ connectors={connectors}
686
+ fields={fields}
687
+ field_view_options={field_view_options}
688
+ />,
689
+ <LineBreakElem connectors={connectors} />,
690
+ <ActionElem connectors={connectors} options={options} />,
691
+ <ContainerElem connectors={connectors} />,
692
+ <CardElem connectors={connectors} />,
693
+ <TabsElem connectors={connectors} />,
694
+ <LinkElem connectors={connectors} />,
695
+ <ImageElem connectors={connectors} images={images} />,
696
+ <HTMLElem connectors={connectors} />,
697
+ <ViewElem connectors={connectors} views={views} />,
698
+ <JoinFieldElem connectors={connectors} options={options} />,
699
+ <DropMenuElem connectors={connectors} />,
700
+ <TableElem connectors={connectors} />,
701
+ <ViewLinkElem connectors={connectors} options={options} />,
702
+ ],
703
+ expanded
681
704
  );
682
705
  };
683
706
 
@@ -687,43 +710,28 @@ export /**
687
710
  * @subcategory components / Toolbox
688
711
  * @namespace
689
712
  */
690
- const ToolboxPage = () => {
713
+ const ToolboxPage = ({ expanded }) => {
691
714
  const { connectors, query } = useEditor();
692
715
  const options = useContext(optionsCtx);
693
716
  const { views, pages, images } = options;
694
- return (
695
- <Fragment>
696
- <div className="toolbar-row">
697
- <TextElem connectors={connectors} />
698
- <ColumnsElem connectors={connectors} />
699
- </div>
700
- <div className="toolbar-row">
701
- <LineBreakElem connectors={connectors} />
702
- <HTMLElem connectors={connectors} />
703
- </div>
704
- <div className="toolbar-row">
705
- <CardElem connectors={connectors} />
706
- <ImageElem connectors={connectors} images={images} />{" "}
707
- </div>
708
- <div className="toolbar-row">
709
- <LinkElem connectors={connectors} />
710
- <ViewElem connectors={connectors} views={views} isPageEdit={true} />
711
- </div>
712
- <div className="toolbar-row">
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>
717
+ return chunkToolBox(
718
+ [
719
+ <TextElem connectors={connectors} />,
720
+ <ColumnsElem connectors={connectors} />,
721
+ <LineBreakElem connectors={connectors} />,
722
+ <HTMLElem connectors={connectors} />,
723
+ <CardElem connectors={connectors} />,
724
+ <ImageElem connectors={connectors} images={images} />,
725
+ <LinkElem connectors={connectors} />,
726
+ <ViewElem connectors={connectors} views={views} isPageEdit={true} />,
727
+ <SearchElem connectors={connectors} />,
728
+ <ActionElem connectors={connectors} options={options} />,
729
+ <ContainerElem connectors={connectors} />,
730
+ <TabsElem connectors={connectors} />,
731
+ <DropMenuElem connectors={connectors} />,
732
+ <PageElem connectors={connectors} pages={pages} />,
733
+ <TableElem connectors={connectors} />,
734
+ ],
735
+ expanded
728
736
  );
729
737
  };
@@ -110,6 +110,7 @@ const ActionSettings = () => {
110
110
  step_only_ifs: node.data.props.step_only_ifs,
111
111
  step_action_names: node.data.props.step_action_names,
112
112
  setting_action_n: node.data.props.setting_action_n,
113
+ spinner: node.data.props.spinner,
113
114
  }));
114
115
  const {
115
116
  actions: { setProp },
@@ -127,6 +128,7 @@ const ActionSettings = () => {
127
128
  setting_action_n,
128
129
  step_only_ifs,
129
130
  step_action_names,
131
+ spinner,
130
132
  } = node;
131
133
  const options = useContext(optionsCtx);
132
134
  const getCfgFields = (fv) => (options.actionConfigForms || {})[fv];
@@ -278,6 +280,16 @@ const ActionSettings = () => {
278
280
  />
279
281
  <label className="form-check-label">User confirmation?</label>
280
282
  </div>
283
+ <div className="form-check">
284
+ <input
285
+ className="form-check-input"
286
+ name="block"
287
+ type="checkbox"
288
+ checked={spinner}
289
+ onChange={setAProp("spinner", { checked: true })}
290
+ />
291
+ <label className="form-check-label">Spinner on click</label>
292
+ </div>
281
293
  {action_style !== "on_page_load" ? (
282
294
  <BlockSetting block={block} setProp={setProp} />
283
295
  ) : null}