Ability to create share url slug (#4550)

* feat: share url slug

* feat: add col urlId

* feat: allow updating urlId

* fix: typo

* fix: migrations

* fix: urlId model validation

* fix: input label

* fix: debounce slug request

* feat: link preview

* fix: send slug variant in response if available

* fix: temporary redirect to slug variant if available

* fix: move up the custom link field

* fix: process and display backend err

* fix: reset custom link state on popover close and remove isCopied

* fix: document link preview

* fix: set urlId when available

* fix: keep unique(urlId, teamId)

* fix: codeql

* fix: get rid of preview type

* fix: width not needed for block elem

* fix: migrations

* fix: array not required

* fix: use val

* fix: validation on shareId and test

* fix: allow clearing urlId

* fix: do not escape

* fix: unique error text

* fix: keep team
This commit is contained in:
Apoorv Mishra
2022-12-14 06:56:36 +05:30
committed by GitHub
parent b9dd060736
commit 79829a3129
16 changed files with 288 additions and 14 deletions

View File

@@ -7,7 +7,10 @@ import {
Scopes,
DataType,
Default,
AllowNull,
Is,
} from "sequelize-typescript";
import { SHARE_URL_SLUG_REGEX } from "@shared/utils/urlHelpers";
import Collection from "./Collection";
import Document from "./Document";
import Team from "./Team";
@@ -85,6 +88,14 @@ class Share extends IdModel {
@Column
views: number;
@AllowNull
@Is({
args: SHARE_URL_SLUG_REGEX,
msg: "Must be only alphanumeric and dashes",
})
@Column
urlId: string | null | undefined;
// getters
get isRevoked() {
@@ -92,7 +103,9 @@ class Share extends IdModel {
}
get canonicalUrl() {
return `${this.team.url}/s/${this.id}`;
return this.urlId
? `${this.team.url}/s/${this.urlId}`
: `${this.team.url}/s/${this.id}`;
}
// associations