Compare commits
2 Commits
main
...
duplicate_
Author | SHA1 | Date | |
---|---|---|---|
5e3cdda008 | |||
1fe8c8cb66 |
|
@ -30,7 +30,7 @@ const Member = ({ member, teamName }: { member: MemberType; teamName: string | n
|
||||||
alt={member.name || ""}
|
alt={member.name || ""}
|
||||||
imageSrc={WEBAPP_URL + "/" + member.username + "/avatar.png"}
|
imageSrc={WEBAPP_URL + "/" + member.username + "/avatar.png"}
|
||||||
/>
|
/>
|
||||||
<section className="mt-2 line-clamp-4 w-full space-y-1">
|
<section className="line-clamp-4 mt-2 w-full space-y-1">
|
||||||
<p className="text-default font-medium">{member.name}</p>
|
<p className="text-default font-medium">{member.name}</p>
|
||||||
<div className="text-subtle line-clamp-3 overflow-ellipsis text-sm font-normal">
|
<div className="text-subtle line-clamp-3 overflow-ellipsis text-sm font-normal">
|
||||||
{!isBioEmpty ? (
|
{!isBioEmpty ? (
|
||||||
|
|
|
@ -192,7 +192,7 @@ export default function Availability() {
|
||||||
<Skeleton
|
<Skeleton
|
||||||
as={Label}
|
as={Label}
|
||||||
htmlFor="hiddenSwitch"
|
htmlFor="hiddenSwitch"
|
||||||
className="mt-2 cursor-pointer self-center pe-2"
|
className="pe-2 mt-2 cursor-pointer self-center"
|
||||||
loadingClassName="me-4">
|
loadingClassName="me-4">
|
||||||
{t("set_to_default")}
|
{t("set_to_default")}
|
||||||
</Skeleton>
|
</Skeleton>
|
||||||
|
|
|
@ -728,7 +728,7 @@ const EventTypeListHeading = ({
|
||||||
{profile?.name || ""}
|
{profile?.name || ""}
|
||||||
</Link>
|
</Link>
|
||||||
{membershipCount && teamId && (
|
{membershipCount && teamId && (
|
||||||
<span className="text-subtle relative -top-px me-2 ms-2 text-xs">
|
<span className="text-subtle me-2 ms-2 relative -top-px text-xs">
|
||||||
<Link href={`/settings/teams/${teamId}/members`}>
|
<Link href={`/settings/teams/${teamId}/members`}>
|
||||||
<Badge variant="gray">
|
<Badge variant="gray">
|
||||||
<Users className="-mt-px mr-1 inline h-3 w-3" />
|
<Users className="-mt-px mr-1 inline h-3 w-3" />
|
||||||
|
|
|
@ -127,10 +127,9 @@
|
||||||
"seat_options_doesnt_support_confirmation": "Seats option doesn't support confirmation requirement",
|
"seat_options_doesnt_support_confirmation": "Seats option doesn't support confirmation requirement",
|
||||||
"team_upgrade_seats_details": "Of the {{memberCount}} members in your team, {{unpaidCount}} seat(s) are unpaid. At ${{seatPrice}}/month per seat the estimated total cost of your membership is ${{totalCost}}/month.",
|
"team_upgrade_seats_details": "Of the {{memberCount}} members in your team, {{unpaidCount}} seat(s) are unpaid. At ${{seatPrice}}/month per seat the estimated total cost of your membership is ${{totalCost}}/month.",
|
||||||
"team_upgrade_banner_description": "Thank you for trialing our new team plan. We noticed your team \"{{teamName}}\" needs to be upgraded.",
|
"team_upgrade_banner_description": "Thank you for trialing our new team plan. We noticed your team \"{{teamName}}\" needs to be upgraded.",
|
||||||
"team_upgrade_banner_action": "Upgrade here",
|
"upgrade_banner_action": "Upgrade here",
|
||||||
"team_upgraded_successfully": "Your team was upgraded successfully!",
|
"team_upgraded_successfully": "Your team was upgraded successfully!",
|
||||||
"org_upgrade_banner_description": "Thank you for trialing our Organization plan. We noticed your Organization \"{{teamName}}\" needs to be upgraded.",
|
"org_upgrade_banner_description": "Thank you for trialing our Organization plan. We noticed your Organization \"{{teamName}}\" needs to be upgraded.",
|
||||||
"org_upgrade_banner_action": "Upgrade here",
|
|
||||||
"org_upgraded_successfully": "Your Organization was upgraded successfully!",
|
"org_upgraded_successfully": "Your Organization was upgraded successfully!",
|
||||||
"use_link_to_reset_password": "Use the link below to reset your password",
|
"use_link_to_reset_password": "Use the link below to reset your password",
|
||||||
"hey_there": "Hey there,",
|
"hey_there": "Hey there,",
|
||||||
|
@ -241,7 +240,6 @@
|
||||||
"forgot": "Forgot?",
|
"forgot": "Forgot?",
|
||||||
"done": "Done",
|
"done": "Done",
|
||||||
"all_done": "All done!",
|
"all_done": "All done!",
|
||||||
"all_apps": "All",
|
|
||||||
"all": "All",
|
"all": "All",
|
||||||
"yours": "Yours",
|
"yours": "Yours",
|
||||||
"available_apps": "Available Apps",
|
"available_apps": "Available Apps",
|
||||||
|
@ -306,7 +304,6 @@
|
||||||
"success": "Success",
|
"success": "Success",
|
||||||
"failed": "Failed",
|
"failed": "Failed",
|
||||||
"password_has_been_reset_login": "Your password has been reset. You can now login with your newly created password.",
|
"password_has_been_reset_login": "Your password has been reset. You can now login with your newly created password.",
|
||||||
"bookerlayout_title": "Layout",
|
|
||||||
"layout": "Layout",
|
"layout": "Layout",
|
||||||
"bookerlayout_default_title": "Default view",
|
"bookerlayout_default_title": "Default view",
|
||||||
"bookerlayout_description": "You can select multiple and your bookers can switch views.",
|
"bookerlayout_description": "You can select multiple and your bookers can switch views.",
|
||||||
|
@ -554,8 +551,6 @@
|
||||||
"members": "Members",
|
"members": "Members",
|
||||||
"organization_members": "Organization members",
|
"organization_members": "Organization members",
|
||||||
"member": "Member",
|
"member": "Member",
|
||||||
"number_member_one": "{{count}} member",
|
|
||||||
"number_member_other": "{{count}} members",
|
|
||||||
"owner": "Owner",
|
"owner": "Owner",
|
||||||
"admin": "Admin",
|
"admin": "Admin",
|
||||||
"administrator_user": "Administrator user",
|
"administrator_user": "Administrator user",
|
||||||
|
@ -1478,7 +1473,7 @@
|
||||||
"team_name_taken": "This name is already taken",
|
"team_name_taken": "This name is already taken",
|
||||||
"must_enter_team_name": "Must enter a team name",
|
"must_enter_team_name": "Must enter a team name",
|
||||||
"team_url_required": "Must enter a team URL",
|
"team_url_required": "Must enter a team URL",
|
||||||
"team_url_taken": "This URL is already taken",
|
"url_taken": "This URL is already taken",
|
||||||
"team_publish": "Publish team",
|
"team_publish": "Publish team",
|
||||||
"number_sms_notifications": "Phone number (SMS notifications)",
|
"number_sms_notifications": "Phone number (SMS notifications)",
|
||||||
"attendee_email_variable": "Attendee email",
|
"attendee_email_variable": "Attendee email",
|
||||||
|
@ -1869,7 +1864,6 @@
|
||||||
"organization_banner_title": "Manage organizations with multiple teams",
|
"organization_banner_title": "Manage organizations with multiple teams",
|
||||||
"set_up_your_organization": "Set up your organization",
|
"set_up_your_organization": "Set up your organization",
|
||||||
"organizations_description": "Organizations are shared environments where teams can create shared event types, apps, workflows and more.",
|
"organizations_description": "Organizations are shared environments where teams can create shared event types, apps, workflows and more.",
|
||||||
"organization_url_taken": "This URL is already taken",
|
|
||||||
"must_enter_organization_name": "Must enter an organization name",
|
"must_enter_organization_name": "Must enter an organization name",
|
||||||
"must_enter_organization_admin_email": "Must enter your organization email address",
|
"must_enter_organization_admin_email": "Must enter your organization email address",
|
||||||
"admin_email": "Your organization email address",
|
"admin_email": "Your organization email address",
|
||||||
|
|
|
@ -6,18 +6,7 @@ import type { TApiKeys } from "@calcom/ee/api-keys/components/ApiKeyListItem";
|
||||||
import LicenseRequired from "@calcom/ee/common/components/LicenseRequired";
|
import LicenseRequired from "@calcom/ee/common/components/LicenseRequired";
|
||||||
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
||||||
import { trpc } from "@calcom/trpc/react";
|
import { trpc } from "@calcom/trpc/react";
|
||||||
import {
|
import { Button, DialogFooter, Form, showToast, Switch, TextField, Tooltip, SelectField } from "@calcom/ui";
|
||||||
Button,
|
|
||||||
DatePicker,
|
|
||||||
DialogFooter,
|
|
||||||
Form,
|
|
||||||
Select,
|
|
||||||
showToast,
|
|
||||||
Switch,
|
|
||||||
TextField,
|
|
||||||
Tooltip,
|
|
||||||
SelectField,
|
|
||||||
} from "@calcom/ui";
|
|
||||||
import { Clipboard } from "@calcom/ui/components/icon";
|
import { Clipboard } from "@calcom/ui/components/icon";
|
||||||
|
|
||||||
export default function ApiKeyDialogForm({
|
export default function ApiKeyDialogForm({
|
||||||
|
@ -42,7 +31,9 @@ export default function ApiKeyDialogForm({
|
||||||
});
|
});
|
||||||
type Option = { value: Date | null | undefined; label: string };
|
type Option = { value: Date | null | undefined; label: string };
|
||||||
const [apiKey, setApiKey] = useState("");
|
const [apiKey, setApiKey] = useState("");
|
||||||
const [expiryDate,setExpiryDate]=useState<Date|null|undefined>(()=>(defaultValues?.expiresAt || dayjs().add(30, "day").toDate()))
|
const [expiryDate, setExpiryDate] = useState<Date | null | undefined>(
|
||||||
|
() => defaultValues?.expiresAt || dayjs().add(30, "day").toDate()
|
||||||
|
);
|
||||||
const [successfulNewApiKeyModal, setSuccessfulNewApiKeyModal] = useState(false);
|
const [successfulNewApiKeyModal, setSuccessfulNewApiKeyModal] = useState(false);
|
||||||
const [apiKeyDetails, setApiKeyDetails] = useState({
|
const [apiKeyDetails, setApiKeyDetails] = useState({
|
||||||
expiresAt: null as Date | null,
|
expiresAt: null as Date | null,
|
||||||
|
@ -59,7 +50,7 @@ export default function ApiKeyDialogForm({
|
||||||
});
|
});
|
||||||
const watchNeverExpires = form.watch("neverExpires");
|
const watchNeverExpires = form.watch("neverExpires");
|
||||||
|
|
||||||
let expiresAtOptions: Option[] = [
|
const expiresAtOptions: Option[] = [
|
||||||
{
|
{
|
||||||
label: t("seven_days"),
|
label: t("seven_days"),
|
||||||
value: dayjs().add(7, "day").toDate(),
|
value: dayjs().add(7, "day").toDate(),
|
||||||
|
@ -182,7 +173,7 @@ export default function ApiKeyDialogForm({
|
||||||
<Controller
|
<Controller
|
||||||
name="expiresAt"
|
name="expiresAt"
|
||||||
render={({ field: { onChange, value } }) => {
|
render={({ field: { onChange, value } }) => {
|
||||||
const defaultValue = expiresAtOptions[1]
|
const defaultValue = expiresAtOptions[1];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SelectField
|
<SelectField
|
||||||
|
@ -204,13 +195,17 @@ export default function ApiKeyDialogForm({
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
onChange(option.value);
|
onChange(option.value);
|
||||||
setExpiryDate(option.value)
|
setExpiryDate(option.value);
|
||||||
}}
|
}}
|
||||||
defaultValue={defaultValue}
|
defaultValue={defaultValue}
|
||||||
/>
|
/>
|
||||||
)}}
|
);
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
<span className="text-subtle text-xs mt-2">{t("api_key_expires_on") }<span className="font-bold"> {dayjs(expiryDate).format('DD-MM-YYYY')}</span></span>
|
<span className="text-subtle mt-2 text-xs">
|
||||||
|
{t("api_key_expires_on")}
|
||||||
|
<span className="font-bold"> {dayjs(expiryDate).format("DD-MM-YYYY")}</span>
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|
|
@ -177,7 +177,7 @@ export const CreateANewOrganizationForm = () => {
|
||||||
message: t("email_already_used"),
|
message: t("email_already_used"),
|
||||||
});
|
});
|
||||||
} else if (err.message === "organization_url_taken") {
|
} else if (err.message === "organization_url_taken") {
|
||||||
newOrganizationFormMethods.setError("slug", { type: "custom", message: t("organization_url_taken") });
|
newOrganizationFormMethods.setError("slug", { type: "custom", message: t("url_taken") });
|
||||||
} else {
|
} else {
|
||||||
setServerErrorMessage(err.message);
|
setServerErrorMessage(err.message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ export function OrgUpgradeBanner() {
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
publishTeamMutation.mutate();
|
publishTeamMutation.mutate();
|
||||||
}}>
|
}}>
|
||||||
{t("org_upgrade_banner_action")}
|
{t("upgrade_banner_action")}
|
||||||
</button>
|
</button>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -44,7 +44,7 @@ export const CreateANewTeamForm = () => {
|
||||||
},
|
},
|
||||||
onError: (err) => {
|
onError: (err) => {
|
||||||
if (err.message === "team_url_taken") {
|
if (err.message === "team_url_taken") {
|
||||||
newTeamFormMethods.setError("slug", { type: "custom", message: t("team_url_taken") });
|
newTeamFormMethods.setError("slug", { type: "custom", message: t("url_taken") });
|
||||||
} else {
|
} else {
|
||||||
setServerErrorMessage(err.message);
|
setServerErrorMessage(err.message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ export function TeamsUpgradeBanner() {
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
publishTeamMutation.mutate({ teamId: membership.team.id });
|
publishTeamMutation.mutate({ teamId: membership.team.id });
|
||||||
}}>
|
}}>
|
||||||
{t("team_upgrade_banner_action")}
|
{t("upgrade_banner_action")}
|
||||||
</button>
|
</button>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -74,7 +74,7 @@ export default function EmptyScreen(props: { isFilteredView: boolean }) {
|
||||||
</div>
|
</div>
|
||||||
<div className="max-w-[420px] text-center">
|
<div className="max-w-[420px] text-center">
|
||||||
<h2 className="text-semibold font-cal mt-6 text-xl dark:text-gray-300">{t("workflows")}</h2>
|
<h2 className="text-semibold font-cal mt-6 text-xl dark:text-gray-300">{t("workflows")}</h2>
|
||||||
<p className="text-default mt-3 line-clamp-2 text-sm font-normal leading-6 dark:text-gray-300">
|
<p className="text-default line-clamp-2 mt-3 text-sm font-normal leading-6 dark:text-gray-300">
|
||||||
{t("no_workflows_description")}
|
{t("no_workflows_description")}
|
||||||
</p>
|
</p>
|
||||||
<div className="mt-8 ">
|
<div className="mt-8 ">
|
||||||
|
|
|
@ -46,7 +46,7 @@ export const CheckedTeamSelect = ({
|
||||||
key={option.value}
|
key={option.value}
|
||||||
className={`flex px-3 py-2 ${index === value.length - 1 ? "" : "border-subtle border-b"}`}>
|
className={`flex px-3 py-2 ${index === value.length - 1 ? "" : "border-subtle border-b"}`}>
|
||||||
<Avatar size="sm" imageSrc={option.avatar} alt={option.label} />
|
<Avatar size="sm" imageSrc={option.avatar} alt={option.label} />
|
||||||
<p className="text-emphasis my-auto ms-3 text-sm">{option.label}</p>
|
<p className="text-emphasis ms-3 my-auto text-sm">{option.label}</p>
|
||||||
<X
|
<X
|
||||||
onClick={() => props.onChange(value.filter((item) => item.value !== option.value))}
|
onClick={() => props.onChange(value.filter((item) => item.value !== option.value))}
|
||||||
className="my-auto ml-auto h-4 w-4"
|
className="my-auto ml-auto h-4 w-4"
|
||||||
|
|
|
@ -542,7 +542,7 @@ export const FormBuilder = function FormBuilder({
|
||||||
/>
|
/>
|
||||||
</Form>
|
</Form>
|
||||||
</div>
|
</div>
|
||||||
<DialogFooter className="relative rounded px-8 pb-8 mt-5" showDivider>
|
<DialogFooter className="relative mt-5 rounded px-8 pb-8" showDivider>
|
||||||
<DialogClose color="secondary">{t("cancel")}</DialogClose>
|
<DialogClose color="secondary">{t("cancel")}</DialogClose>
|
||||||
<Button data-testid="field-add-save" type="submit" form="form-builder">
|
<Button data-testid="field-add-save" type="submit" form="form-builder">
|
||||||
{isFieldEditMode ? t("save") : t("add")}
|
{isFieldEditMode ? t("save") : t("add")}
|
||||||
|
|
|
@ -51,7 +51,7 @@ export const BookerLayoutSelector = ({
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Label className="mb-0">{title ? title : t("bookerlayout_title")}</Label>
|
<Label className="mb-0">{title ? title : t("layout")}</Label>
|
||||||
<p className="text-subtle max-w-full break-words py-1 text-sm">
|
<p className="text-subtle max-w-full break-words py-1 text-sm">
|
||||||
{description ? description : t("bookerlayout_description")}
|
{description ? description : t("bookerlayout_description")}
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -73,7 +73,7 @@ function CategoryTab({ selectedCategory, categories, searchText }: CategoryTabPr
|
||||||
: t("category_apps", {
|
: t("category_apps", {
|
||||||
category:
|
category:
|
||||||
(selectedCategory && selectedCategory[0].toUpperCase() + selectedCategory.slice(1)) ||
|
(selectedCategory && selectedCategory[0].toUpperCase() + selectedCategory.slice(1)) ||
|
||||||
t("all_apps"),
|
t("all"),
|
||||||
})}
|
})}
|
||||||
</h2>
|
</h2>
|
||||||
{leftVisible && (
|
{leftVisible && (
|
||||||
|
@ -96,7 +96,7 @@ function CategoryTab({ selectedCategory, categories, searchText }: CategoryTabPr
|
||||||
selectedCategory === null ? "bg-emphasis text-default" : "bg-muted text-emphasis",
|
selectedCategory === null ? "bg-emphasis text-default" : "bg-muted text-emphasis",
|
||||||
"hover:bg-emphasis min-w-max rounded-md px-4 py-2.5 text-sm font-medium hover:cursor-pointer"
|
"hover:bg-emphasis min-w-max rounded-md px-4 py-2.5 text-sm font-medium hover:cursor-pointer"
|
||||||
)}>
|
)}>
|
||||||
{t("all_apps")}
|
{t("all")}
|
||||||
</li>
|
</li>
|
||||||
{categories.map((cat, pos) => (
|
{categories.map((cat, pos) => (
|
||||||
<li
|
<li
|
||||||
|
|
|
@ -233,7 +233,7 @@ export const Button = forwardRef<HTMLAnchorElement | HTMLButtonElement, ButtonPr
|
||||||
<>
|
<>
|
||||||
{variant === "fab" ? (
|
{variant === "fab" ? (
|
||||||
<>
|
<>
|
||||||
<EndIcon className="-mr-1 me-2 ms-2 hidden h-5 w-5 md:inline" />
|
<EndIcon className="me-2 ms-2 -mr-1 hidden h-5 w-5 md:inline" />
|
||||||
<Plus className="inline h-6 w-6 md:hidden" />
|
<Plus className="inline h-6 w-6 md:hidden" />
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
|
|
|
@ -21,7 +21,7 @@ export function ButtonGroup({ children, combined = false, containerProps }: Prop
|
||||||
"flex",
|
"flex",
|
||||||
!combined
|
!combined
|
||||||
? "space-x-2 rtl:space-x-reverse"
|
? "space-x-2 rtl:space-x-reverse"
|
||||||
: "ltr:[&>*:first-child]:ml-0 ltr:[&>*:first-child]:rounded-l-md ltr:[&>*:first-child]:border-l rtl:[&>*:first-child]:rounded-r-md rtl:[&>*:first-child]:border-r ltr:[&>*:last-child]:rounded-r-md rtl:[&>*:last-child]:rounded-l-md [&>a]:-ml-[1px] hover:[&>a]:z-[1] [&>button]:-ml-[1px] hover:[&>button]:z-[1] [&_a]:rounded-none [&_button]:rounded-none",
|
: "[&_a]:rounded-none ltr:[&>*:first-child]:ml-0 ltr:[&>*:first-child]:rounded-l-md ltr:[&>*:first-child]:border-l rtl:[&>*:first-child]:rounded-r-md rtl:[&>*:first-child]:border-r ltr:[&>*:last-child]:rounded-r-md rtl:[&>*:last-child]:rounded-l-md [&>a]:-ml-[1px] hover:[&>a]:z-[1] [&>button]:-ml-[1px] hover:[&>button]:z-[1] [&_button]:rounded-none",
|
||||||
containerProps?.className
|
containerProps?.className
|
||||||
)}>
|
)}>
|
||||||
{children}
|
{children}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user