import { ArrowDown, CircleIcon, MoreHorizIcon, OpenNewPage, RefreshIcon, WarningIcon, CopyIcon, TrashCanIcon, LockIcon, SaveAsCopy, } from "@app/assets/images/icons"; import CardContent from "@app/components/card-content/CardContent"; import CardHeader from "@app/components/card-header/CardHeader"; import Card from "@app/components/card/Card"; import Select from "@app/components/select/Select"; import NoFiltersAnimation from "@app/assets/lotties/No-Filters.json"; import Lottie from "react-lottie"; import * as PopoverPrimitive from "@radix-ui/react-popover"; import { ButtonProps, CTACardProps, CardHeaderProps, CustomizableCardProps, FieldsOption, Filters, MenuOption, ResultCardProps, SelectOption, } from "@app/models/components"; import { Filter, Language, SingleUrl, TopPostsSettings, } from "@app/models/global"; import React, { useState, useEffect, useMemo, useRef } from "react"; import "./top-posts-manager-styles.scss"; import Skeleton from "@app/components/skeleton/Skeleton"; import { useTopPostsManager } from "@settings/contexts/TopPostsManagerContext"; import { DeleteFilterPayload, FilterDataPayload, UpdateFilterPayload, UrlData, } from "@app/models/api"; import { checkUrlDataType, deleteFilter, getFilter, getFilters, updateFilter, updateTopPostsSettings, } from "@app/services/api"; import { useSettings } from "@settings/contexts/SettingsContext"; import { useViewMode } from "@settings/contexts/ViewModeContext"; import { Oval } from "react-loader-spinner"; import EmptyState from "@app/components/EmptyState/EmptyState"; import Button from "@app/components/button/Button"; import NumberInput from "@app/components/number-input/NumberInput"; import { convertToEasternArabic, dateRangeToSeconds, ensureDateRangeObject, mapTaxonomyToName, normalizeRangeForHeaders, renderType, secondsToDateRange, } from "@app/services/utilities"; import SelectableChip from "@app/components/selectable-chip/SelectableChip"; import Modal from "@app/components/modal/Modal"; import InputField from "@app/components/input-field/InputField"; import { Controller, useForm } from "react-hook-form"; import Menu from "@app/components/menu/Menu"; import { isEmpty, isEqual, isNumber } from "lodash"; import Tooltip from "@app/components/Tooltip/Tooltip"; import ResultCard from "@app/components/result-card/ResultCard"; import CTACard from "@app/components/CTACard/CTACard"; import DateRangePicker from "@app/components/date-range-picker/DateRangePicker"; import { DateRange } from "react-day-picker"; import CustomizableCard from "@app/components/customizableCard/CustomizableCard"; import { useDateRangePicker } from "@app/components/date-range-picker/DateRangePickerContext"; import UpgradePopover from "@app/components/UpgradePopover/UpgradePopover"; import { ActivePopover, useUpgradePopover, } from "@settings/contexts/UpgradePopoverContext"; import InfiniteScroll from "@app/components/InfiniteScroll/InfiniteScroll"; import FilterInfo from "@app/components/filterInfo/FilterInfo"; import SkeletonCard from "@app/components/skeleton-card/SkeletonCard"; const TopPostsManager = () => { const { isPremium } = process.env.CONFIG; const [posts, setPosts] = useState>([]); const [isRefreshing, setIsRefreshing] = useState(false); const [isFetching, setIsFetching] = useState(false); const [isSavingFilteredPosts, setIsSavingFilteredPosts] = useState(false); const [isDeletingFilteredPosts, setIsDeletingFilteredPosts] = useState(false); const [filteredPosts, setFilteredPosts] = useState>([]); const [resetPosts, setResetPosts] = useState>([]); const [limit, setLimit] = useState(isPremium ? 500 : 5); const [selectedFilter, setSelectedFilter] = useState(-1); const [previousSelectedFilter, setPreviousSelectedFilter] = useState(-1); const [showFilters, setShowFilters] = useState(false); const [isOpenDeleteFilterModal, setIsOpenDeleteFilterModal] = useState(false); const [isOpenAddFilterModal, setIsOpenAddFilterModal] = useState(false); const [isSavingFilterInfo, setIsSavingFilterInfo] = useState(false); const [filterDetails, setFilterDetails] = useState({ filter_name: "", description: "", slug: "", }); const [currentFilterDetails, setCurrentFilterDetails] = useState({ filter_name: "", description: "", slug: "", }); const [isMenuOpen, setIsMenuOpen] = useState(false); const [isFilterMenuOpen, setIsFilterMenuOpen] = useState(false); const [currentFilterId, setCurrentFilterId] = useState(""); const [checkUrlDataResponses, setCheckUrlDataResponses] = useState({}); const { isCustomRange } = useDateRangePicker(); const { initialSettings, showNotification, setInitialSettings, homeURLs, dateRangeOptions, scopeOptions, } = useSettings(); const { filters, setFilters } = useTopPostsManager(); const { isRTL } = useViewMode(); const { control, handleSubmit, reset } = useForm({ mode: "all", }); const [pinnedPosts, setPinnedPosts] = useState>([]); const [excludedPosts, setExcludedPosts] = useState>([]); const countFilter = (selectedFilter: number) => { if (selectedFilter != -1) { return `My Filter ${userFilters.length}`; } else { return `My Filter ${userFilters.length + 1}`; } }; const generateFilterSlug = (selectedFilter: number) => { if (selectedFilter != -1) { return `my-filter-${userFilters.length} `; } else { return `my-filter-${userFilters.length + 1} `; } }; const { microSiteURL } = process.env.CONFIG; const localization = topPostsI18n.data; const popoverContent = ( <>

{localization.top_posts_for_google_analytics}