diff --git a/apps/web/components/DestinationCalendarSelector.tsx b/apps/web/components/DestinationCalendarSelector.tsx
deleted file mode 100644
index f8b817d391..0000000000
--- a/apps/web/components/DestinationCalendarSelector.tsx
+++ /dev/null
@@ -1,137 +0,0 @@
-import classNames from "classnames";
-import React, { useEffect, useState } from "react";
-import Select from "react-select";
-
-import { useLocale } from "@calcom/lib/hooks/useLocale";
-import type { DestinationCalendar } from "@calcom/prisma/client";
-import { trpc } from "@calcom/trpc/react";
-
-interface Props {
- onChange: (value: { externalId: string; integration: string }) => void;
- isLoading?: boolean;
- hidePlaceholder?: boolean;
- /** The external Id of the connected calendar */
- value: string | undefined;
- destinationCalendar?: DestinationCalendar | null;
-}
-
-const DestinationCalendarSelector = ({
- onChange,
- isLoading,
- value,
- hidePlaceholder,
- destinationCalendar,
-}: Props): JSX.Element | null => {
- const { t } = useLocale();
- const query = trpc.viewer.connectedCalendars.useQuery();
- const [selectedOption, setSelectedOption] = useState<{ value: string; label: string } | null>(null);
-
- // Extra styles to show prefixed text in react-select
- const content = (hidePlaceholder = false) => {
- if (!hidePlaceholder) {
- return {
- alignItems: "center",
- display: "flex",
- ":before": {
- content: `'${t("select_destination_calendar")}:'`,
- display: "block",
- marginRight: 8,
- },
- };
- }
- return {};
- };
-
- useEffect(() => {
- const selected = query.data?.connectedCalendars
- .map((connected) => connected.calendars ?? [])
- .flat()
- .find((cal) => cal.externalId === value);
-
- if (selected) {
- setSelectedOption({
- value: `${selected.integration}:${selected.externalId}`,
- label: selected.name || "",
- });
- }
- }, [query.data?.connectedCalendars, value]);
-
- if (!query.data?.connectedCalendars.length) {
- return null;
- }
- const options =
- query.data.connectedCalendars.map((selectedCalendar) => ({
- key: selectedCalendar.credentialId,
- label: `${selectedCalendar.integration.title} (${selectedCalendar.primary?.name})`,
- options: (selectedCalendar.calendars ?? [])
- .filter((cal) => cal.readOnly === false)
- .map((cal) => ({
- label: cal.name || "",
- value: `${cal.integration}:${cal.externalId}`,
- })),
- })) ?? [];
- const defaultCalendarSelectedString = destinationCalendar?.externalId
- ? `(${
- destinationCalendar.externalId.length > 15
- ? destinationCalendar.externalId.substring(0, 15) + "..."
- : destinationCalendar.externalId
- })`
- : "";
- return (
-
-
- );
-};
-
-export default DestinationCalendarSelector;
diff --git a/apps/web/components/apps/DestinationCalendarSelector.tsx b/apps/web/components/apps/DestinationCalendarSelector.tsx
deleted file mode 100644
index 853fffd1ad..0000000000
--- a/apps/web/components/apps/DestinationCalendarSelector.tsx
+++ /dev/null
@@ -1,139 +0,0 @@
-import classNames from "classnames";
-import React, { useEffect, useState } from "react";
-import Select from "react-select";
-
-import { useLocale } from "@calcom/lib/hooks/useLocale";
-import type { DestinationCalendar } from "@calcom/prisma/client";
-import { trpc } from "@calcom/trpc/react";
-
-interface Props {
- onChange: (value: { externalId: string; integration: string }) => void;
- isLoading?: boolean;
- hidePlaceholder?: boolean;
- /** The external Id of the connected calendar */
- value: string | undefined;
- destinationCalendar?: DestinationCalendar | null;
-}
-
-const DestinationCalendarSelector = ({
- onChange,
- isLoading,
- value,
- hidePlaceholder,
- destinationCalendar,
-}: Props): JSX.Element | null => {
- const { t } = useLocale();
- const query = trpc.viewer.connectedCalendars.useQuery();
- const [selectedOption, setSelectedOption] = useState<{ value: string; label: string } | null>(null);
-
- // Extra styles to show prefixed text in react-select
- const content = (hidePlaceholder = false) => {
- if (!hidePlaceholder) {
- return {
- alignItems: "center",
- display: "flex",
- ":before": {
- content: `'${t("select_destination_calendar")}:'`,
- display: "block",
- marginRight: 8,
- },
- };
- }
- return {};
- };
-
- useEffect(() => {
- const selected = query.data?.connectedCalendars
- .map((connected) => connected.calendars ?? [])
- .flat()
- .find((cal) => cal.externalId === value);
-
- if (selected) {
- setSelectedOption({
- value: `${selected.integration}:${selected.externalId}`,
- label: `${selected.name} (${selected.externalId})` || "",
- });
- }
- }, [query.data?.connectedCalendars, value]);
-
- if (!query.data?.connectedCalendars.length) {
- return null;
- }
- const options =
- query.data.connectedCalendars.map((selectedCalendar) => ({
- key: selectedCalendar.credentialId,
- label: `${selectedCalendar.integration.title} (${selectedCalendar.primary?.name})`,
- options: (selectedCalendar.calendars ?? [])
- .filter((cal) => cal.readOnly === false)
- .map((cal) => ({
- label: `${cal.name} (${cal.externalId})` || "",
- value: `${cal.integration}:${cal.externalId}`,
- })),
- })) ?? [];
- const defaultCalendarSelectedString = destinationCalendar?.externalId
- ? `(${
- destinationCalendar.externalId.length > 15
- ? destinationCalendar.externalId.substring(0, 15) + "..."
- : destinationCalendar.externalId
- })`
- : "";
- return (
-
-
- );
-};
-
-export default DestinationCalendarSelector;
diff --git a/apps/web/components/getting-started/components/CreateEventsOnCalendarSelect.tsx b/apps/web/components/getting-started/components/CreateEventsOnCalendarSelect.tsx
index 5aa3edffa3..1e1cdba104 100644
--- a/apps/web/components/getting-started/components/CreateEventsOnCalendarSelect.tsx
+++ b/apps/web/components/getting-started/components/CreateEventsOnCalendarSelect.tsx
@@ -1,9 +1,8 @@
+import DestinationCalendarSelector from "@calcom/features/calendars/DestinationCalendarSelector";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import type { RouterInputs } from "@calcom/trpc/react";
import { trpc } from "@calcom/trpc/react";
-import DestinationCalendarSelector from "@components/DestinationCalendarSelector";
-
interface ICreateEventsOnCalendarSelectProps {
calendar?: RouterInputs["viewer"]["setDestinationCalendar"] | null;
}