diff --git a/.github/workflows/release-executables.yml b/.github/workflows/release-executables.yml index 3857df89d6..686cdf0d57 100644 --- a/.github/workflows/release-executables.yml +++ b/.github/workflows/release-executables.yml @@ -5,13 +5,13 @@ on: workflow_dispatch: inputs: tag: - description: "Timely version" + description: "Tag name" required: true - # Triggered by release-nightly-dev.yml / release-pr.yml + # Triggered by release-nocodb.yml workflow_call: inputs: tag: - description: "Timely version" + description: "Tag name" required: true type: string secrets: @@ -21,10 +21,15 @@ jobs: build-executables: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + # Get the latest draft release for asset upload url + - uses: cardinalby/git-get-release-action@v1 + id: get_release + env: + GITHUB_TOKEN: ${{ secrets.NC_GITHUB_TOKEN }} with: - token: ${{ secrets.NC_GITHUB_TOKEN }} - repository: 'nocodb/nocodb-timely' + latest: 1 + draft: true + - uses: actions/checkout@v3 - name: Cache node modules id: cache-npm uses: actions/cache@v3 @@ -38,6 +43,7 @@ jobs: ${{ runner.os }}-build-${{ env.cache-name }}- ${{ runner.os }}-build- ${{ runner.os }}- + - name: Cache pkg modules id: cache-pkg uses: actions/cache@v3 @@ -51,8 +57,11 @@ jobs: ${{ runner.os }}-build-${{ env.cache-name }}- ${{ runner.os }}-build- ${{ runner.os }}- + + # for building images for all platforms these libraries are required in Linux - name: Install QEMU and ldid run: | + sudo apt update # Install qemu sudo apt install qemu binfmt-support qemu-user-static # install ldid @@ -61,26 +70,17 @@ jobs: ./make.sh sudo cp ./ldid /usr/local/bin - - name: Update nocodb-timely - env: - TAG: ${{ github.event.inputs.tag || inputs.tag }} - run: | - npm i -E nocodb-daily@$TAG - - git config user.name 'github-actions[bot]' - git config user.email 'github-actions[bot]@users.noreply.github.com' - - git commit package.json -m "Update to $TAG" - git tag $TAG - git push --tags - - - uses: actions/setup-node@v3 with: node-version: 16 - - name : Install dependencies and build executables + - name : Install nocodb, other dependencies and build executables run: | + cd ./scripts/pkg-executable + + # Install nocodb version based on provided tag name + npm i -E nocodb@$TAG + # install npm dependendencies npm i @@ -88,37 +88,66 @@ jobs: rsync -rvzhP ./binaries/binding/ ./node_modules/sqlite3/lib/binding/ # clean up code to optimize size - npx modclean --patterns="default:*" --ignore="nc-lib-gui-daily/**,dayjs/**,express-status-monitor/**,sqlite3/**" --run + npx modclean --patterns="default:*" --ignore="nc-lib-gui/**,dayjs/**,express-status-monitor/**,sqlite3/**" --run # build executables npm run build + ls ./dist + + # Move macOS executables for signing mkdir ./mac-dist mv ./dist/Noco-macos-arm64 ./mac-dist/ mv ./dist/Noco-macos-x64 ./mac-dist/ - # Compress executables - GZIP=-9 tar -czvf ./dist/Noco-linux-x64.tar.gz ./dist/Noco-linux-x64 - GZIP=-9 tar -czvf ./dist/Noco-win-x64.tar.gz ./dist/Noco-win-x64.exe - GZIP=-9 tar -czvf ./dist/Noco-linux-arm64.tar.gz ./dist/Noco-linux-arm64 - GZIP=-9 tar -czvf ./dist/Noco-win-arm64.tar.gz ./dist/Noco-win-arm64.exe + - name: Upload win-arm64 build to asset + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.get_release.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/dist/Noco-win-arm64.exe + asset_name: Noco-win-arm64 + asset_content_type: application/octet-stream + + - name: Upload win-x64 build to asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.get_release.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/dist/Noco-win-x64.exe + asset_name: Noco-win-x64 + asset_content_type: application/octet-stream - - name: Upload executables(except mac executables) to release - uses: svenstaro/upload-release-action@v2 + - name: Upload linux-arm64 build to asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - repo_token: ${{ secrets.NC_GITHUB_TOKEN }} - file: dist/** - tag: ${{ github.event.inputs.tag || inputs.tag }} - overwrite: true - file_glob: true - repo_name: nocodb/nocodb-timely + upload_url: ${{ steps.get_release.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/dist/Noco-linux-arm64 + asset_name: Noco-linux-arm64 + asset_content_type: application/octet-stream + + - name: Upload linux-x64 build to asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.get_release.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/dist/Noco-linux-x64 + asset_name: Noco-linux-x64 + asset_content_type: application/octet-stream - uses: actions/upload-artifact@master with: name: ${{ github.event.inputs.tag || inputs.tag }} - path: mac-dist + path: scripts/pkg-executable/mac-dist retention-days: 1 - + outputs: + upload_url: ${{ steps.get_release.outputs.upload_url }} sign-mac-executables: runs-on: macos-latest needs: build-executables @@ -127,41 +156,111 @@ jobs: - uses: actions/download-artifact@master with: name: ${{ github.event.inputs.tag || inputs.tag }} - path: mac-dist + path: scripts/pkg-executable/mac-dist - name: Sign macOS executables run: | - /usr/bin/codesign --force -s - ./mac-dist/Noco-macos-arm64 -v - /usr/bin/codesign --force -s - ./mac-dist/Noco-macos-x64 -v + /usr/bin/codesign --force -s - ./scripts/pkg-executable/mac-dist/Noco-macos-arm64 -v + /usr/bin/codesign --force -s - ./scripts/pkg-executable/mac-dist/Noco-macos-x64 -v - uses: actions/upload-artifact@master with: name: ${{ github.event.inputs.tag || inputs.tag }} - path: mac-dist + path: scripts/pkg-executable/mac-dist retention-days: 1 - publish-mac-executables: - needs: sign-mac-executables + publish-mac-executables-and-homebrew: + needs: [sign-mac-executables,build-executables] runs-on: ubuntu-latest steps: - uses: actions/download-artifact@master with: name: ${{ github.event.inputs.tag || inputs.tag }} - path: mac-dist - - name: Compress files + path: scripts/pkg-executable/mac-dist + + + + - uses: actions/checkout@v3 + with: + path: 'homebrew-nocodb' + token: ${{ secrets.NC_GITHUB_TOKEN }} + repository: 'nocodb/homebrew-nocodb' + fetch-depth: 0 + + - name: Compress files and calculate checksum + run: | + cd ./scripts/pkg-executable + cp ./mac-dist/Noco-macos-x64 ./mac-dist/nocodb + tar -czf ./mac-dist/nocodb.tar.gz ./mac-dist/nocodb + rm ./mac-dist/nocodb + echo "::set-output name=CHECKSUM::$(shasum -a 256 ./mac-dist/nocodb.tar.gz | awk '{print $1}')" + id: compress + + + - name: Upload macos-x64 build to asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.build-executables.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/mac-dist/Noco-macos-x64 + asset_name: Noco-macos-x64 + asset_content_type: application/octet-stream + + + + - name: Upload macos-arm64 build to asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.build-executables.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/mac-dist/Noco-macos-arm64 + asset_name: Noco-macos-arm64 + asset_content_type: application/octet-stream + + + + - name: Upload macos compressed build(for homebrew) to asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.build-executables.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/mac-dist/nocodb.tar.gz + asset_name: nocodb.tar.gz + asset_content_type: application/octet-stream + + + - name: Generate Homebrew Formula class and push run: | - GZIP=-9 tar -czvf ./mac-dist/Noco-macos-x64.tar.gz ./mac-dist/Noco-macos-x64 - GZIP=-9 tar -czvf ./mac-dist/Noco-macos-arm64.tar.gz ./mac-dist/Noco-macos-arm64 - - - name: Upload mac executables to release - uses: svenstaro/upload-release-action@v2 - with: - repo_token: ${{ secrets.NC_GITHUB_TOKEN }} - file: mac-dist/** - tag: ${{ github.event.inputs.tag || inputs.tag }} - overwrite: true - file_glob: true - repo_name: nocodb/nocodb-timely + FORMULA_CLASS_STR=$(cat << EOF + class Nocodb < Formula + desc "Get Human Readable file size information. - CLI" + homepage "https://github.com/nocodb/nocodb" + url "https://github.com/nocodb/nocodb/releases/download/${{ github.event.inputs.tag || inputs.tag }}/nocodb.tar.gz" + sha256 "${{ steps.compress.outputs.CHECKSUM }}" + license "MIT" + version "${{ github.event.inputs.tag || inputs.tag }}" + + def install + bin.install "nocodb" + end + end + EOF + ) + + cd ./homebrew-nocodb + + printf "$FORMULA_CLASS_STR" > ./Formula/nocodb.rb + + git config user.name 'github-actions[bot]' + git config user.email 'github-actions[bot]@users.noreply.github.com' + + git commit ./Formula/nocodb.rb -m "Automatic publish" + git push + + diff --git a/.github/workflows/release-nightly-dev.yml b/.github/workflows/release-nightly-dev.yml index 76322d0135..79b651cf8d 100644 --- a/.github/workflows/release-nightly-dev.yml +++ b/.github/workflows/release-nightly-dev.yml @@ -51,7 +51,7 @@ jobs: # Build executables and publish to GitHub release-executables: needs: [set-tag, release-npm] - uses: ./.github/workflows/release-executables.yml + uses: ./.github/workflows/release-timely-executables.yml with: tag: ${{ needs.set-tag.outputs.current_version }}-${{ needs.set-tag.outputs.nightly_build_tag }} secrets: diff --git a/.github/workflows/release-nocodb.yml b/.github/workflows/release-nocodb.yml index 0fe5ba1e03..cf09af5b83 100644 --- a/.github/workflows/release-nocodb.yml +++ b/.github/workflows/release-nocodb.yml @@ -44,14 +44,14 @@ jobs: # bump the version from PREV_TAG TARGET_TAG=$(echo ${PREV_TAG} | awk -F. -v OFS=. '{$NF += 1 ; print}') fi - + echo target version: ${TARGET_TAG} echo previous version: ${PREV_TAG} echo "::set-output name=target_tag::${TARGET_TAG}" echo "::set-output name=prev_tag::${PREV_TAG}" - name: Verify run : | - echo ${{ steps.process-input.outputs.target_tag }} + echo ${{ steps.process-input.outputs.target_tag }} # Merge develop to master pr-to-master: @@ -94,6 +94,15 @@ jobs: DOCKERHUB_USERNAME: "${{ secrets.DOCKERHUB_USERNAME }}" DOCKERHUB_TOKEN: "${{ secrets.DOCKERHUB_TOKEN }}" + # Build executables and publish to GitHub + release-executables: + needs: [release-draft-note, process-input] + uses: ./.github/workflows/release-executables.yml + with: + tag: ${{ needs.process-input.outputs.target_tag }} + secrets: + NC_GITHUB_TOKEN: "${{ secrets.NC_GITHUB_TOKEN }}" + # Close all issues with target tags 'Fixed' & 'Resolved' close-fixed-issues: needs: [release-docker, process-input] @@ -101,7 +110,7 @@ jobs: with: issue_label: 'Status: Fixed' version: ${{ needs.process-input.outputs.target_tag }} - + close-resolved-issues: needs: [close-fixed-issues, process-input] uses: ./.github/workflows/release-close-issue.yml diff --git a/.github/workflows/release-pr.yml b/.github/workflows/release-pr.yml index 70aeed0bb0..9d19da81a6 100644 --- a/.github/workflows/release-pr.yml +++ b/.github/workflows/release-pr.yml @@ -80,7 +80,7 @@ jobs: # Build executables and publish to GitHub release-executables: needs: [set-tag, release-npm] - uses: ./.github/workflows/release-executables.yml + uses: ./.github/workflows/release-timely-executables.yml with: tag: ${{ needs.set-tag.outputs.current_version }}-${{ needs.set-tag.outputs.target_tag }} secrets: @@ -119,8 +119,7 @@ jobs: #### MacOS ```bash - mkdir -p ./${{ needs.set-tag.outputs.current_version }}/${{ needs.set-tag.outputs.target_tag }} \ - && cd ./${{ needs.set-tag.outputs.current_version }}/${{ needs.set-tag.outputs.target_tag }} \ + mkdir -p ./${{ needs.set-tag.outputs.current_version }}/${{ needs.set-tag.outputs.target_tag }} && cd "$_" \ && curl http://dl.nocodb.com/${{ needs.set-tag.outputs.current_version }}-${{ needs.set-tag.outputs.target_tag }}/Noco-macos-arm64 -o noco -L \ && chmod +x noco \ && ./noco @@ -128,13 +127,12 @@ jobs: #### Linux ```bash - mkdir -p ./${{ needs.set-tag.outputs.current_version }}/${{ needs.set-tag.outputs.target_tag }} \ - && cd ./${{ needs.set-tag.outputs.current_version }}/${{ needs.set-tag.outputs.target_tag }} \ + mkdir -p ./${{ needs.set-tag.outputs.current_version }}/${{ needs.set-tag.outputs.target_tag }} && cd "$_" \ && curl http://dl.nocodb.com/${{ needs.set-tag.outputs.current_version }}-${{ needs.set-tag.outputs.target_tag }}/Noco-linux-x64 -o noco -L \ && chmod +x noco \ && ./noco ``` - #### windows + #### Windows ```bash iwp http://dl.nocodb.com/${{ needs.set-tag.outputs.current_version }}-${{ needs.set-tag.outputs.target_tag }}/Noco-win-arm64.exe diff --git a/.github/workflows/release-timely-executables.yml b/.github/workflows/release-timely-executables.yml new file mode 100644 index 0000000000..9f8b0c7c1a --- /dev/null +++ b/.github/workflows/release-timely-executables.yml @@ -0,0 +1,158 @@ +name: "Release : Timely Executables" + +on: + # Triggered manually + workflow_dispatch: + inputs: + tag: + description: "Timely version" + required: true + # Triggered by release-nightly-dev.yml / release-pr.yml + workflow_call: + inputs: + tag: + description: "Timely version" + required: true + type: string + secrets: + NC_GITHUB_TOKEN: + required: true +jobs: + build-executables: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + token: ${{ secrets.NC_GITHUB_TOKEN }} + repository: 'nocodb/nocodb-timely' + - name: Cache node modules + id: cache-npm + uses: actions/cache@v3 + env: + cache-name: cache-node-modules + with: + # npm cache files are stored in `~/.npm` on Linux/macOS + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Cache pkg modules + id: cache-pkg + uses: actions/cache@v3 + env: + cache-name: cache-pkg + with: + # pkg cache files are stored in `~/.pkg-cache` + path: ~/.pkg-cache + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install QEMU and ldid + run: | + sudo apt update + # Install qemu + sudo apt install qemu binfmt-support qemu-user-static + # install ldid + git clone https://github.com/daeken/ldid.git + cd ./ldid + ./make.sh + sudo cp ./ldid /usr/local/bin + + - name: Update nocodb-timely + env: + TAG: ${{ github.event.inputs.tag || inputs.tag }} + run: | + npm i -E nocodb-daily@$TAG + + git config user.name 'github-actions[bot]' + git config user.email 'github-actions[bot]@users.noreply.github.com' + + git commit package.json -m "Update to $TAG" + git tag $TAG + git push --tags + + + - uses: actions/setup-node@v3 + with: + node-version: 16 + + - name : Install dependencies and build executables + run: | + # install npm dependendencies + npm i + + # Copy sqlite binaries + rsync -rvzhP ./binaries/binding/ ./node_modules/sqlite3/lib/binding/ + + # clean up code to optimize size + npx modclean --patterns="default:*" --ignore="nc-lib-gui-daily/**,dayjs/**,express-status-monitor/**,sqlite3/**" --run + + # build executables + npm run build + + mkdir ./mac-dist + mv ./dist/Noco-macos-arm64 ./mac-dist/ + mv ./dist/Noco-macos-x64 ./mac-dist/ + + - name: Upload executables(except mac executables) to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.NC_GITHUB_TOKEN }} + file: dist/** + tag: ${{ github.event.inputs.tag || inputs.tag }} + overwrite: true + file_glob: true + repo_name: nocodb/nocodb-timely + + - uses: actions/upload-artifact@master + with: + name: ${{ github.event.inputs.tag || inputs.tag }} + path: mac-dist + retention-days: 1 + + sign-mac-executables: + runs-on: macos-latest + needs: build-executables + steps: + + - uses: actions/download-artifact@master + with: + name: ${{ github.event.inputs.tag || inputs.tag }} + path: mac-dist + + - name: Sign macOS executables + run: | + /usr/bin/codesign --force -s - ./mac-dist/Noco-macos-arm64 -v + /usr/bin/codesign --force -s - ./mac-dist/Noco-macos-x64 -v + + - uses: actions/upload-artifact@master + with: + name: ${{ github.event.inputs.tag || inputs.tag }} + path: mac-dist + retention-days: 1 + + + publish-mac-executables: + needs: sign-mac-executables + runs-on: ubuntu-latest + steps: + - uses: actions/download-artifact@master + with: + name: ${{ github.event.inputs.tag || inputs.tag }} + path: mac-dist + + - name: Upload mac executables to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.NC_GITHUB_TOKEN }} + file: mac-dist/** + tag: ${{ github.event.inputs.tag || inputs.tag }} + overwrite: true + file_glob: true + repo_name: nocodb/nocodb-timely + + diff --git a/packages/nc-gui/components/CreateOrEditProject.vue b/packages/nc-gui/components/CreateOrEditProject.vue index fe943c6354..12db72c65a 100644 --- a/packages/nc-gui/components/CreateOrEditProject.vue +++ b/packages/nc-gui/components/CreateOrEditProject.vue @@ -453,14 +453,14 @@ " /> - + + @@ -37,10 +38,11 @@ import BooleanCell from '~/components/project/spreadsheet/components/cell/Boolea import EmailCell from '~/components/project/spreadsheet/components/cell/EmailCell' import RatingCell from '~/components/project/spreadsheet/components/editableCell/RatingCell' import CurrencyCell from '@/components/project/spreadsheet/components/cell/CurrencyCell' +import DurationCell from '@/components/project/spreadsheet/components/cell/DurationCell' export default { name: 'TableCell', - components: { RatingCell, EmailCell, TimeCell, DateTimeCell, DateCell, JsonCell, UrlCell, EditableAttachmentCell, EnumCell, SetListCell, BooleanCell, CurrencyCell }, + components: { RatingCell, EmailCell, TimeCell, DateTimeCell, DateCell, JsonCell, UrlCell, EditableAttachmentCell, EnumCell, SetListCell, BooleanCell, CurrencyCell, DurationCell }, mixins: [cell], props: ['value', 'dbAlias', 'isLocked', 'selected', 'column'], computed: { diff --git a/packages/nc-gui/components/project/spreadsheet/components/EditColumn.vue b/packages/nc-gui/components/project/spreadsheet/components/EditColumn.vue index 15d7c07ac7..03d75d602c 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/EditColumn.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/EditColumn.vue @@ -172,7 +172,6 @@ :column="newColumn" :meta="meta" /> - - - @@ -572,6 +580,7 @@ import { validateColumnName } from '~/helpers' import RatingOptions from '~/components/project/spreadsheet/components/editColumn/RatingOptions' import CheckboxOptions from '~/components/project/spreadsheet/components/editColumn/CheckboxOptions' import CurrencyOptions from '@/components/project/spreadsheet/components/editColumn/CurrencyOptions' +import DurationOptions from '@/components/project/spreadsheet/components/editColumn/DurationOptions' const columnToValidate = [UITypes.Email, UITypes.URL, UITypes.PhoneNumber] @@ -587,7 +596,8 @@ export default { DlgLabelSubmitCancel, RelationOptions, CustomSelectOptions, - CurrencyOptions + CurrencyOptions, + DurationOptions }, props: { nodes: Object, @@ -617,7 +627,8 @@ export default { UITypes.Lookup, UITypes.Rollup, UITypes.SpecificDBType, - UITypes.Formula + UITypes.Formula, + UITypes.Duration ].includes(this.newColumn && this.newColumn.uidt) }, uiTypes() { @@ -631,7 +642,7 @@ export default { ] }, isEditDisabled() { - return this.editColumn && this.sqlUi === SqliteUi + return this.editColumn && this.sqlUi === SqliteUi && this.column.uidt !== UITypes.Duration }, isSQLite() { return this.sqlUi === SqliteUi diff --git a/packages/nc-gui/components/project/spreadsheet/components/EditableCell.vue b/packages/nc-gui/components/project/spreadsheet/components/EditableCell.vue index 5ce6c7e428..a1e8974d1c 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/EditableCell.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/EditableCell.vue @@ -35,6 +35,16 @@ v-on="$listeners" /> + + + + + + + + + + diff --git a/packages/nc-gui/components/project/spreadsheet/components/editColumn/DurationOptions.vue b/packages/nc-gui/components/project/spreadsheet/components/editColumn/DurationOptions.vue new file mode 100644 index 0000000000..4386131fd4 --- /dev/null +++ b/packages/nc-gui/components/project/spreadsheet/components/editColumn/DurationOptions.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/packages/nc-gui/components/project/spreadsheet/components/editableCell/DurationCell.vue b/packages/nc-gui/components/project/spreadsheet/components/editableCell/DurationCell.vue new file mode 100644 index 0000000000..c19d2199b3 --- /dev/null +++ b/packages/nc-gui/components/project/spreadsheet/components/editableCell/DurationCell.vue @@ -0,0 +1,139 @@ + + + + + + + diff --git a/packages/nc-gui/components/project/spreadsheet/components/editableCell/TimePickerCell.vue b/packages/nc-gui/components/project/spreadsheet/components/editableCell/TimePickerCell.vue index cdaa9605c6..86b1f94b7c 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/editableCell/TimePickerCell.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/editableCell/TimePickerCell.vue @@ -5,7 +5,7 @@
- + {{ $t('general.save') }} @@ -15,7 +15,6 @@