mirror of
https://github.com/outline/outline.git
synced 2026-04-29 22:19:32 -05:00
bf9065d6e6
* Add description column to groups
- Add database migration to add description column to groups table
- Update server-side Group model with description field and validation
- Update group presenter to include description in API responses
- Update API schemas to validate description field in create/update operations
- Update client-side Group model with description field and search integration
- Update unfurl types and presenter to include description for hover cards
- Update HoverPreviewGroup component to display description in UI
The description field is optional with a 2000 character limit and is included
in group search functionality.
* Fix TypeScript error: Add missing description prop to HoverPreviewGroup
The HoverPreviewGroup component expects a description prop but it wasn't being passed from HoverPreview.tsx. This was causing the types check to fail with:
error TS2741: Property 'description' is missing in type '{ ref: MutableRefObject<HTMLDivElement | null>; name: any; memberCount: any; users: any; }' but required in type 'Props'.
Fixed by adding the description prop from data.description which is available in the UnfurlResponse[UnfurlResourceType.Group] type.
* Move 2000 char validation to shared constant
- Add GroupValidation.maxDescriptionLength constant to shared/validations.ts
- Update server Group model to use GroupValidation.maxDescriptionLength
- Update API schemas to use the shared constant instead of hardcoded value
- Ensures consistent validation across the entire application
* Add description field to CreateGroupDialog and EditGroupDialog
- Add description textarea input to both create and edit group dialogs
- Import GroupValidation constant for consistent character limit validation
- Set maxLength to GroupValidation.maxDescriptionLength (2000 chars)
- Include description in form submission for both create and update operations
- Add placeholder text for better UX
- Maintain backward compatibility with optional description field
* Add description column to GroupsTable
- Add description column between name and members columns
- Display group description with fallback to em dash (—) for empty descriptions
- Use secondary text styling for consistent visual hierarchy
- Set column width to 2fr for adequate space
- Maintain sortable functionality through accessor
* tweaks
* animation
---------
Co-authored-by: codegen-sh[bot] <131295404+codegen-sh[bot]@users.noreply.github.com>
Co-authored-by: Tom Moor <tom@getoutline.com>
132 lines
3.2 KiB
TypeScript
132 lines
3.2 KiB
TypeScript
export const AttachmentValidation = {
|
|
/** The limited allowable mime-types for user and team avatars */
|
|
avatarContentTypes: ["image/jpg", "image/jpeg", "image/png"],
|
|
|
|
/** Image mime-types commonly supported by modern browsers */
|
|
imageContentTypes: [
|
|
"image/jpg",
|
|
"image/jpeg",
|
|
"image/pjpeg",
|
|
"image/png",
|
|
"image/apng",
|
|
"image/avif",
|
|
"image/gif",
|
|
"image/webp",
|
|
"image/svg",
|
|
"image/svg+xml",
|
|
"image/bmp",
|
|
"image/tiff",
|
|
"image/heic",
|
|
],
|
|
};
|
|
|
|
export const ApiKeyValidation = {
|
|
/** The minimum length of the API key name */
|
|
minNameLength: 3,
|
|
/** The maximum length of the API key name */
|
|
maxNameLength: 255,
|
|
};
|
|
|
|
export const CollectionValidation = {
|
|
/** The maximum length of the collection description */
|
|
maxDescriptionLength: 100 * 1000,
|
|
|
|
/** The maximum length of the collection name */
|
|
maxNameLength: 100,
|
|
};
|
|
|
|
export const CommentValidation = {
|
|
/** The maximum length of a comment */
|
|
maxLength: 1000,
|
|
};
|
|
|
|
export const DocumentValidation = {
|
|
/** The maximum length of the document title */
|
|
maxTitleLength: 100,
|
|
|
|
/** The maximum length of the document summary */
|
|
maxSummaryLength: 1000,
|
|
|
|
/** The maximum size of the collaborative document state */
|
|
maxStateLength: 1500 * 1024,
|
|
|
|
/** The maximum recommended size of the document content */
|
|
maxRecommendedLength: 250000,
|
|
};
|
|
|
|
export const GroupValidation = {
|
|
/** The maximum length of the group description */
|
|
maxDescriptionLength: 2000,
|
|
};
|
|
|
|
export const ImportValidation = {
|
|
/** The maximum length of the import name */
|
|
maxNameLength: 100,
|
|
};
|
|
|
|
export const OAuthClientValidation = {
|
|
/** The maximum length of the OAuth client name */
|
|
maxNameLength: 100,
|
|
|
|
/** The maximum length of the OAuth client description */
|
|
maxDescriptionLength: 1000,
|
|
|
|
/** The maximum length of the OAuth client developer name */
|
|
maxDeveloperNameLength: 100,
|
|
|
|
/** The maximum length of the OAuth client developer URL */
|
|
maxDeveloperUrlLength: 1000,
|
|
|
|
/** The maximum length of the OAuth client avatar URL */
|
|
maxAvatarUrlLength: 1000,
|
|
|
|
/** The maximum length of an OAuth client redirect URI */
|
|
maxRedirectUriLength: 1000,
|
|
};
|
|
|
|
export const RevisionValidation = {
|
|
minNameLength: 1,
|
|
maxNameLength: 255,
|
|
};
|
|
|
|
export const PinValidation = {
|
|
/** The maximum number of pinned documents on an individual collection or home screen */
|
|
max: 8,
|
|
};
|
|
|
|
export const TeamValidation = {
|
|
/** The maximum number of domains per team on cloud hosted */
|
|
maxDomains: 10,
|
|
|
|
/** The maximum length of the team name */
|
|
maxNameLength: 255,
|
|
|
|
/** The maximum length of the team description */
|
|
maxDescriptionLength: 1000,
|
|
|
|
/** The minimum length of the team subdomain */
|
|
minSubdomainLength: 2,
|
|
|
|
/** The maximum length of the team subdomain for cloud */
|
|
maxSubdomainLength: 32,
|
|
|
|
/** The maximum length of the team subdomain for self-hosted */
|
|
maxSubdomainSelfHostedLength: 255,
|
|
};
|
|
|
|
export const UserValidation = {
|
|
/** The maximum number of invites per request */
|
|
maxInvitesPerRequest: 20,
|
|
|
|
/** The maximum length of the user name */
|
|
maxNameLength: 255,
|
|
|
|
/** The maximum length of the user email */
|
|
maxEmailLength: 255,
|
|
};
|
|
|
|
export const WebhookSubscriptionValidation = {
|
|
/** The maximum number of webhooks per team */
|
|
maxSubscriptions: 10,
|
|
};
|