diff --git a/.eslintrc.json b/.eslintrc.json
index 7a824ff6c..25e83d5ac 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -50,7 +50,8 @@
"@next/next/no-img-element": "off",
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-explicit-any": "off",
- "@typescript-eslint/no-var-requires": "off"
+ "@typescript-eslint/no-var-requires": "off",
+ "@typescript-eslint/no-empty-interface": "off"
},
"globals": {
"React": "writable"
diff --git a/.github/workflows/cd-manual.yml b/.github/workflows/cd-manual.yml
index 1afc6e934..ac701fcc5 100644
--- a/.github/workflows/cd-manual.yml
+++ b/.github/workflows/cd-manual.yml
@@ -21,7 +21,7 @@ jobs:
- uses: actions/checkout@v3
- uses: mr-smithers-excellent/docker-build-push@v6
- name: Build & push Docker image for ${{ matrix.db-type }}
+ name: Build & push Docker image to ghcr.io for ${{ matrix.db-type }}
with:
image: umami
tags: ${{ matrix.db-type }}-${{ inputs.version }}, ${{ matrix.db-type }}-latest
@@ -31,3 +31,13 @@ jobs:
platform: linux/amd64,linux/arm64
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
+
+ - uses: mr-smithers-excellent/docker-build-push@v6
+ name: Build & push Docker image to docker.io for ${{ matrix.db-type }}
+ with:
+ image: umamisoftware/umami
+ tags: ${{ matrix.db-type }}-${{ inputs.version }}, ${{ matrix.db-type }}-latest
+ buildArgs: DATABASE_TYPE=${{ matrix.db-type }}
+ registry: docker.io
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_PASSWORD }}
\ No newline at end of file
diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml
index 6fda05a66..0660bcbaa 100644
--- a/.github/workflows/cd.yml
+++ b/.github/workflows/cd.yml
@@ -19,7 +19,7 @@ jobs:
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- uses: mr-smithers-excellent/docker-build-push@v6
- name: Build & push Docker image for ${{ matrix.db-type }}
+ name: Build & push Docker image to ghcr.io for ${{ matrix.db-type }}
with:
image: umami
tags: ${{ matrix.db-type }}-${{ env.RELEASE_VERSION }}, ${{ matrix.db-type }}-latest
@@ -29,3 +29,13 @@ jobs:
platform: linux/amd64,linux/arm64
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
+
+ - uses: mr-smithers-excellent/docker-build-push@v6
+ name: Build & push Docker image to docker.io for ${{ matrix.db-type }}
+ with:
+ image: umamisoftware/umami
+ tags: ${{ matrix.db-type }}-${{ env.RELEASE_VERSION }}, ${{ matrix.db-type }}-latest
+ buildArgs: DATABASE_TYPE=${{ matrix.db-type }}
+ registry: docker.io
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_PASSWORD }}
\ No newline at end of file
diff --git a/.github/workflows/stale-issues.yml b/.github/workflows/stale-issues.yml
index bf2505b14..24711fba7 100644
--- a/.github/workflows/stale-issues.yml
+++ b/.github/workflows/stale-issues.yml
@@ -19,4 +19,6 @@ jobs:
close-issue-message: 'This issue was closed because it has been inactive for 7 days since being marked as stale.'
days-before-pr-stale: -1
days-before-pr-close: -1
+ operations-per-run: 200
+ ascending: true
repo-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/assets/magnet.svg b/assets/magnet.svg
new file mode 100644
index 000000000..3c64c3ee5
--- /dev/null
+++ b/assets/magnet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/components/common/Pager.js b/components/common/Pager.js
new file mode 100644
index 000000000..aaeffbaec
--- /dev/null
+++ b/components/common/Pager.js
@@ -0,0 +1,45 @@
+import styles from './Pager.module.css';
+import { Button, Flexbox, Icon, Icons } from 'react-basics';
+import useMessages from 'hooks/useMessages';
+
+export function Pager({ page, pageSize, count, onPageChange }) {
+ const { formatMessage, labels } = useMessages();
+ const maxPage = Math.ceil(count / pageSize);
+ const lastPage = page === maxPage;
+ const firstPage = page === 1;
+
+ if (count === 0) {
+ return null;
+ }
+
+ const handlePageChange = value => {
+ const nextPage = page + value;
+ if (nextPage > 0 && nextPage <= maxPage) {
+ onPageChange(nextPage);
+ }
+ };
+
+ if (maxPage === 1) {
+ return null;
+ }
+
+ return (
+