diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8a88ce017c..9b7d939130 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,7 +5,7 @@ on: types: [opened, synchronize] env: - NODE_VERSION: 18.x + NODE_VERSION: 20.x jobs: setup: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..ab69ccdd92 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,50 @@ +name: Release + +on: + push: + tags: + - '*' # This will make sure tag creations also trigger the workflow. + +env: + NODE_VERSION: 20.x + AWS_DEFAULT_REGION: us-west-2 + AWS_ACCESS_KEY_ID: ${{ vars.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + +jobs: + deploy_to_test: + # if: false + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + + steps: + - run: echo "Triggered by ${{ github.event_name }} event." + - name: Check out repository code ${{ github.repository }} on ${{ github.ref }} + uses: actions/checkout@v3 + + - name: Setup Ruby and Install Jekyll + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.0' + bundler-cache: true + + - name: Install Jekyll + run: gem install jekyll + + - name: Restore node modules from cache + uses: actions/cache@v3 + with: + path: node_modules + key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install awscli + run: | + sudo apt-get update + sudo apt install -y awscli + + - name: Release + uses: borales/actions-yarn@v4 + with: + cmd: release \ No newline at end of file diff --git a/src/WebformBuilder.js b/src/WebformBuilder.js index 184c717486..4871940aa3 100644 --- a/src/WebformBuilder.js +++ b/src/WebformBuilder.js @@ -134,6 +134,7 @@ export default class WebformBuilder extends Component { html, disableBuilderActions: self?.component?.disableBuilderActions, childComponent: component, + design: self?.options?.design }); }; @@ -560,6 +561,7 @@ export default class WebformBuilder extends Component { attach(element) { this.on('change', (form) => { this.populateRecaptchaSettings(form); + this.webform.setAlert(false); }); return super.attach(element).then(() => { this.loadRefs(element, { @@ -945,6 +947,21 @@ export default class WebformBuilder extends Component { } } + if (draggableComponent.uniqueComponent) { + let isCompAlreadyExists = false; + eachComponent(this.webform.components, (component) => { + if (component.key === draggableComponent.schema.key) { + isCompAlreadyExists = true; + return; + } + }, true); + if (isCompAlreadyExists) { + this.webform.redraw(); + this.webform.setAlert('danger', `You cannot add more than one ${draggableComponent.title} component to one page.`); + return; + } + } + if (target !== source) { // Ensure the key remains unique in its new container. BuilderUtils.uniquify(this.findNamespaceRoot(target.formioComponent), info); @@ -982,7 +999,7 @@ export default class WebformBuilder extends Component { const componentInDataGrid = parent.type === 'datagrid'; - if (isNew && !this.options.noNewEdit && !info.noNewEdit) { + if (isNew && !this.options.noNewEdit && !info.noNewEdit && !(this.options.design && info.type === 'reviewpage')) { this.editComponent(info, target, isNew, null, null, { inDataGrid: componentInDataGrid }); } diff --git a/src/components/datagrid/DataGrid.js b/src/components/datagrid/DataGrid.js index 7436d80b26..b4be349fca 100644 --- a/src/components/datagrid/DataGrid.js +++ b/src/components/datagrid/DataGrid.js @@ -240,7 +240,7 @@ export default class DataGridComponent extends NestedArrayComponent { } get canAddColumn() { - return this.builderMode; + return this.builderMode && !this.options.design; } render() {