feat(calcom): add settings page prototypes & refactor titles to AppHeader layout#693
Draft
pasqualevitiello wants to merge 136 commits intomainfrom
Draft
feat(calcom): add settings page prototypes & refactor titles to AppHeader layout#693pasqualevitiello wants to merge 136 commits intomainfrom
pasqualevitiello wants to merge 136 commits intomainfrom
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
2 Skipped Deployments
|
Contributor
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
…gsToggle wrapper Co-Authored-By: [email protected] <[email protected]>
Co-Authored-By: unknown <>
…t-manager.devin.ai/proxy/github.com/cosscom/coss into devin/1771337493-push-notifications-page
…n and add empty states Co-Authored-By: unknown <>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds settings page prototypes for the calcom example app, covering user-level, organization-level, and developer settings:
Push notifications (
/settings/my-account/push-notifications)CardFrame/CardPanellayout matching existing profile and general pagesSwitchtoggle for browser notifications with toast feedback ("Notifications enabled successfully" / "Notifications disabled successfully")Features (
/settings/my-account/features)ToggleGroup(Off / On / Default) per feature — modeled after cal.com's feature opt-in settingsSettingsTogglecomponent (extended with controlledchecked/onCheckedChangeprops)Billing (
/settings/billing)CardFramewith header ("Billing" / "Manage all things billing")Organization profile (
/settings/organizations/profile)page.tsxwithCardFramestructure; interactive fields extracted toOrganizationProfileFieldsclient component rendered insideCardPanel/settings/my-account/profilelayout)CardFrameFooterOrganization profile — no permissions (
/settings/organizations/profile/no-permissions)useCopyToClipboard)Developer webhooks (
/settings/developer/webhooks) — merged fromfeature/calcom-webhooks/settings/developerredirects to/settings/developer/webhooks/settings/developer/webhooks/new— new webhook form with subscriber URL, enable toggle, event trigger combobox (multi-select with chips), no-show timing, webhook version select, secret field, custom payload template (collapsible), and a test webhook section/settings/developer/webhooks/demo— demo page with three sample webhooks showing list layout with badges, user avatars, and enabled/disabled statesWebhooksPageContent,WebhooksListContent,WebhooksEmpty,NewWebhookButton,NewWebhookFormFields,WebhookTestSectioncomponentsDeveloper OAuth clients (
/settings/developer/oauth)CardFramewith header ("OAuth Clients" / "Create and manage OAuth clients for third-party integrations") — no header action button in empty state, consistent with/developer/webhooksKeyIconand "No OAuth Clients" message, containing a detached dialog trigger (default button variant)NewOAuthClientDialogRoot) is rendered once at the page levelListItem/ListItemContent/ListItemTitle/ListItemBadges/ListItemActionscomponents matching the/booking/pastpatternKeyIconinline with title, client name, status badge (Pending/Approved/Rejected with mapped variants), and a chevron buttonCardFrameHeader(variant="outline") when clients existForm,Field/FieldLabel/FieldDescription,Input,Textarea,Switch,Avatar,InputGroup(for copyable fields), andDialog*components from@coss/uiDeveloper API keys (
/settings/developer/api-keys)CardFramewith header ("API Keys" / "Create and manage API keys for authenticating with the Cal.com API") — no header action button in empty state, consistent with OAuth/webhooks patternKeyIconand "No API Keys" message with "New" button (default variant)ListItem/ListItemContent/ListItemTitle/ListItemBadges/ListItemActionscomponentsCopyableFieldcomponent from OAuth page)CardFrameHeader(variant="outline") when keys existApiKeysPageContent,ApiKeysList,ApiKeysEmpty,NewApiKeyDialog,EditApiKeyDialogCompliance (
/settings/security/compliance)CardFrame/CardPanellayout matching other security settings pages (password, impersonation, 2FA)ComplianceDocumentsclient component extracted into co-located file,page.tsxremains a server componentsettings-navigation-data.tsServer/client component architecture
All
page.tsxfiles are server components. Only the innerCardPanelcontent is extracted into co-located"use client"components, following the pattern established in/settings/my-account/features:organization-profile-form.tsx→OrganizationProfileFieldsprofile-form.tsx→ProfileFieldsgeneral-settings-form.tsx→GeneralSettingsFieldsfeatures-list.tsx→FeaturesList,AutoOptInTogglepush-notifications-toggle.tsx→PushNotificationsTogglecopy-link-button.tsx→CopyLinkButtonnew-webhook-form-fields.tsx→NewWebhookFormFieldswebhook-test-section.tsx→WebhookTestSectionwebhooks-list-content.tsx→WebhooksListContentcompliance-documents.tsx→ComplianceDocumentsnew-oauth-client-dialog.tsx→NewOAuthClientDialogRootoauth-client-submitted-dialog.tsx→OAuthClientSubmittedDialogedit-oauth-client-dialog.tsx→EditOAuthClientDialogoauth-clients-list.tsx→OAuthClientsListoauth-empty.tsx→OAuthEmptyoauth-page-content.tsx→OAuthPageContentapi-keys-page-content.tsx→ApiKeysPageContentapi-keys-list.tsx→ApiKeysListapi-keys-empty.tsx→ApiKeysEmptynew-api-key-dialog.tsx→NewApiKeyDialogedit-api-key-dialog.tsx→EditApiKeyDialogOther changes
SettingsTogglecomponent extended to support controlled mode (checked,onCheckedChangeprops)ToastProviderposition changed tobottom-centerwithAnchoredToastProviderwrapperfontMonovariable added to body classes in layouttext-[.625rem](wastext-[10px])/settings/my-account/general/page.tsxnow includesSettingsToggleinstances (dynamic group links, search engine indexing, monthly digest, impersonation prevention) directly in the server componentListItemSpanningTriggercomponent added tolist-item.tsxexports (replacesListItemTitleLink)CardFrameActioncomponent added to card exports for header action buttonsUpdates since last revision
Form layout consolidation: FieldGrid reusable component
Extracted and expanded usage of a reusable responsive 2-column grid wrapper for settings forms:
components/particles/field-grid.tsxFieldGrid(container) +FieldGridRow(full-width row)grid grid-cols-1 gap-6 md:grid-cols-2+ full-width rows viacol-span-fullclassNameoverrides (e.g.gap-4,gap-x-*,gap-y-*)Now used in:
/settings/my-account/general(timezone uses nestedFieldGrid)/settings/my-account/calendars/settings/my-account/profile(also usesFieldGridfor the email input grid)/settings/security/password(usesFieldGridRowfor the password requirements text)/settings/billing(credits section)/settings/teams/[id]/settings/settings/teams/[id]/profileAudit note: After applying these refactors, there are no remaining matches for the original
grid-cols-1 … md:grid-cols-2form-field wrapper pattern insideapps/examples/calcom/app/(settings)/settings/**(excluding theFieldGridcomponent itself).Lockfile
bun.lockgained a single"configVersion": 0entry.Review & Testing Checklist for Human
/settings/my-account/profile/settings/security/password/settings/teams/[id]/profile/settings/billing(Credits section)FieldGridusage doesn’t introduce spacing regressions (notably: profile username/full-name row, email grid, and password requirements text row spanning)/settings/my-account/general(timezone row + nested grid)/settings/my-account/calendars/settings/teams/[id]/settingsNotes