* Install upstash redis again - base of noficationSender * Setup email handler etc and use tasker * Remove logs * Sending emails and correct format and spacing in emails * Update email styles * Update email styles * add switch to enable feature * fix: reset tasker types - will fix in new PR * WIP: test suite * WIP: test suite * Add redis service and add WIP mock test * Add tests for redis service and fix lpush * More working tests * More working tests * fix: type error + typo * update export to match i18n next mock * (debug) push for debug * Fix: fixed hosting in mocks * Add common.json i18n * add better test descriptions * reset mocks after each test to allow concurancy * Remove redundant RedisService.test.ts * Rename and remove redundant isAdmin check * Rename to .d.ts * Add key versioning to constructRedisKey * Update packages/trpc/server/routers/viewer/slots/handleNotificationWhenNoSlots.ts Co-authored-by: Hariom Balhara <hariombalhara@gmail.com> * Update packages/trpc/server/routers/viewer/slots/handleNotificationWhenNoSlots.ts Co-authored-by: Hariom Balhara <hariombalhara@gmail.com> * Add try/catch * fix breaking when option === undefined * Add missing await to Promise.all * Rename data stored in redis to save space * Include thrown error in logs --------- Co-authored-by: Hariom Balhara <hariombalhara@gmail.com> Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
import { useState } from "react";
|
|
|
|
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
|
import type { RouterOutputs } from "@calcom/trpc";
|
|
import { trpc } from "@calcom/trpc";
|
|
import { SettingsToggle, showToast } from "@calcom/ui";
|
|
|
|
interface GeneralViewProps {
|
|
currentOrg: RouterOutputs["viewer"]["organizations"]["listCurrent"];
|
|
isAdminOrOwner: boolean;
|
|
}
|
|
|
|
export const NoSlotsNotificationSwitch = ({ currentOrg, isAdminOrOwner }: GeneralViewProps) => {
|
|
const { t } = useLocale();
|
|
const utils = trpc.useUtils();
|
|
const [notificationActive, setNotificationActive] = useState(
|
|
!!currentOrg.organizationSettings.adminGetsNoSlotsNotification
|
|
);
|
|
|
|
const mutation = trpc.viewer.organizations.update.useMutation({
|
|
onSuccess: async () => {
|
|
showToast(t("settings_updated_successfully"), "success");
|
|
},
|
|
onError: () => {
|
|
showToast(t("error_updating_settings"), "error");
|
|
},
|
|
onSettled: () => {
|
|
utils.viewer.organizations.listCurrent.invalidate();
|
|
},
|
|
});
|
|
|
|
if (!isAdminOrOwner) return null;
|
|
|
|
return (
|
|
<>
|
|
<SettingsToggle
|
|
toggleSwitchAtTheEnd={true}
|
|
title={t("organization_no_slots_notification_switch_title")}
|
|
disabled={mutation?.isPending}
|
|
description={t("organization_no_slots_notification_switch_description")}
|
|
checked={notificationActive}
|
|
onCheckedChange={(checked) => {
|
|
mutation.mutate({
|
|
adminGetsNoSlotsNotification: checked,
|
|
});
|
|
setNotificationActive(checked);
|
|
}}
|
|
switchContainerClassName="mt-6"
|
|
/>
|
|
</>
|
|
);
|
|
};
|