{"version":3,"file":"InsightsAccountItem.vue_vue_type_script_setup_true_lang-ChuJ7iSV.js","sources":["../../src/insights/InsightsFollowButton.vue","../../src/insights/InsightsDeleteButton.vue","../../src/audience-creator/audienceCreate.ts","../../src/insights/composables.ts","../../src/insights/InsightsAccountItem.vue"],"sourcesContent":["\n\n\n","\n \n \n ","import { api, AudienceConfigInput, AudiencePlan, schema } from '../api'\nimport { PlanType, InsightsInfluencer } from '../insights/composables'\n\nexport async function getPlans() {\n return api.call(schema.AudiencePlan.list, { body: {} })\n}\n\nexport async function getJobTitles() {\n const result = await api.call(schema.JobTitles.list, { body: {} })\n return result\n}\n\nexport async function generatePerspectivesAsync(data: string) {\n return api.call(schema.AudienceConfig.perspectives, { body: { keyword: data } })\n}\n\nexport async function saveAudienceConfig(data: AudienceConfigInput) {\n return api.call(schema.AudienceConfig.create, { body: data })\n}\n\nexport async function updateAudienceConfig(config_id: number, data: any) {\n return api.call(schema.AudienceConfig.update, { path: { pk: config_id }, body: data } as any)\n}\n\nexport async function generateAudience(data: {\n keywords: string[]\n exclude_keywords?: string[]\n input_countries?: string[]\n plan_name: string\n plan_type: string | null\n input_query: string | null\n config_id: number | null\n}) {\n return api.call(schema.BuildAudience.create, { body: data })\n}\n\nexport interface BuildAudienceParams {\n keywords: string[]\n exclude_keywords: string[] | []\n input_countries: string[] | []\n limit: 'narrow' | 'balanced' | 'broad'\n plan_type: PlanType\n plan_name: string\n types: number[] | []\n selected_influencers: InsightsInfluencer[] | []\n account_types: number[] | []\n}\n\nexport async function autocompleteCreatorQuery(partial_query: string) {\n const result = await api.call(schema.AudienceConfig.autocomplete, { body: { partial_query } })\n return result.queries\n}\n\nexport function getPlanType(plan: AudiencePlan) {\n const name = plan.name.toLowerCase()\n if (name.includes('profession')) return 'profession'\n if (name.includes('handle')) return 'handle'\n if (name.includes('build')) return 'build'\n if (name.includes('company')) return 'abm'\n throw new Error('Unknown plan type')\n}\n","import { computed, ref } from 'vue'\nimport { useRouter } from 'vue-router'\nimport {\n api,\n AudiencePlan,\n Insights,\n BuildAudience,\n BuildAudienceInput,\n schema,\n StandaloneNativePackGenerator,\n} from '../api'\nimport { getPlans } from '../audience-creator/audienceCreate'\nimport { formatBigNum } from '../utils'\n\nexport type InsightsInfluencer = Insights['influencers'][number]\nexport type InsightsCoreAccount = Insights['core_accounts'][number]\nexport type PlanType = 'interest' | 'profession' | 'handle' // should move to BE choicefield\nexport type InsightView = 'dashboard' | 'protargeting' | 'extension'\n\nexport type InfluencerOrSample = (Insights['influencers'] | Insights['core_accounts'])[number]\n\nexport function isInfluencer(\n item: InfluencerOrSample | NonNullable['handles'][number],\n): item is InfluencerOrSample {\n return 'base_audience_count' in item\n}\n\nexport async function retrieveInsights(pk: number) {\n return api.call(schema.Insights.retrieve, { path: { pk } })\n}\n\n// workaround for plan type/name\ntype GenerateInput = Omit\n\nasync function generateBuildAudience(input: GenerateInput) {\n const body: BuildAudienceInput = { ...input }\n const result = await api.call(schema.BuildAudience.create, { body })\n return result\n}\n\nexport function usePreviewInsights() {\n const insights = ref()\n const insightsLoading = ref(false)\n const pollDelay = 3000 // ms\n const pollTimes = 20\n let currentRequest = 0 // used for canceling old requests\n\n async function loadInsights(plan: AudiencePlan, params: GenerateInput) {\n const requestId = ++currentRequest\n insightsLoading.value = true\n insights.value = undefined\n insights.value = await generateBuildAudience(params)\n\n for (let i = 0; i < pollTimes; ++i) {\n await new Promise((resolve) => setTimeout(resolve, pollDelay))\n if (insights.value) {\n const result: Insights | BuildAudience = await retrieveInsights(insights.value!.id)\n if (requestId !== currentRequest) return // new request was made\n insights.value = result\n if (true) { // TODO: check if insights are complete and fix the condition\n break // insights are complete\n }\n }\n }\n insightsLoading.value = false\n\n if (!isInsightsComplete.value) {\n // eslint-disable-next-line no-console\n console.warn('Failed to retrieve full insights data')\n }\n }\n\n const isInsightsComplete = computed(() => {\n // These fields have items before insights is considered fully loaded\n return (\n (insights.value && insights.value.suggestions?.length) ||\n (insights.value &&\n insights.value.influencers?.length &&\n insights.value.core_accounts?.length &&\n insights.value.audience_estimation?.min &&\n insights.value.accounts_count?.InitialSearch)\n )\n })\n\n return { insights, insightsLoading, loadInsights }\n}\n\nexport function useAccountInsights(handle: string) {\n const { insights, loadInsights, insightsLoading } = usePreviewInsights()\n\n async function fetchAccountInsights() {\n const plans = await getPlans() // should be provided\n const plan = plans.find((p) => p.name.toLowerCase().includes('handle'))!\n const plan_type = 'handle' as PlanType\n const body = {\n keywords: [] as string[],\n input_query: handle,\n plan_name: 'analyse_a_handle',\n plan_type: plan_type,\n config_id: null,\n }\n if (!body.input_query.startsWith('@')) body.input_query = '@' + body.input_query\n body.keywords.push(body.input_query)\n\n await loadInsights(plan, body)\n }\n\n return { insights, insightsLoading, fetchAccountInsights }\n}\n\nexport function useInfluencerCommunities(handle: string) {\n type InsightsInfluencerDetail = (typeof schema.InsightsInfluencer.list.responseType.results)[number]\n\n const router = useRouter()\n\n const results = ref()\n const loading = ref(true)\n\n handle = handle.replace('@', '')\n\n async function fetch() {\n loading.value = true\n const response = await api.call(schema.InsightsInfluencer.list, { query: { handle } })\n results.value = response.results\n results.value.filter((item: InsightsInfluencerDetail) => item.community_name?.length)\n loading.value = false\n }\n\n function goToInfluencerCommunity(comm: InsightsInfluencerDetail) {\n // community_name is also the input_query for the community\n const search = comm.community_name\n const section = 'Influential Accounts'\n const resolved = router.resolve({ name: 'audience-creator', query: { search, section } })\n location.href = resolved.href\n }\n\n return { results, loading, goToInfluencerCommunity, fetch }\n}\n\nexport function useInsightsSize() {\n function audienceSize(insights: Insights | BuildAudience | StandaloneNativePackGenerator) {\n if (insights.audience_estimation) {\n const { min, max, warning } = insights.audience_estimation\n if (warning) {\n return warning\n } else if (!isNaN(min + max)) {\n // influencer based size estimate\n return `${formatBigNum(min)} - ${formatBigNum(max)}`\n }\n }\n return 'N/A'\n }\n\n function nativeTargetingSize(insights: Insights | BuildAudience | StandaloneNativePackGenerator) {\n if (insights.targeting_package_size) {\n const { min, max } = insights.targeting_package_size\n if (!isNaN(min + max) && max) {\n return `${formatBigNum(min)} - ${formatBigNum(max)}`\n }\n }\n return 'N/A'\n }\n\n return { audienceSize, nativeTargetingSize }\n}\n","\n \n \n\n \n\n \n \n\n\n\n"],"names":["props","__props","t","useI18n","connectedTwitterAccounts","computed","user","currentUser","_a","x","followUnfollowAccount","messageService","account_ids","insights_id","is_followed","api","schema","emit","__emit","deleteAccount","getPlans","getJobTitles","generatePerspectivesAsync","data","saveAudienceConfig","updateAudienceConfig","config_id","autocompleteCreatorQuery","partial_query","isInfluencer","item","retrieveInsights","pk","generateBuildAudience","input","body","usePreviewInsights","insights","ref","insightsLoading","pollDelay","pollTimes","currentRequest","loadInsights","plan","params","requestId","i","resolve","result","isInsightsComplete","_b","_c","_d","_e","useAccountInsights","handle","fetchAccountInsights","p","useInfluencerCommunities","router","useRouter","results","loading","fetch","response","goToInfluencerCommunity","comm","search","resolved","useInsightsSize","audienceSize","min","max","warning","formatBigNum","nativeTargetingSize","japaneseUser","useUserLanguage","mobile","useScreenSize","clickHandle","socialNetwork","sanitizedHandle","url","getConnectivity","influential_account_details","getRelevancy","onDeleteInfluencer","influencer_id"],"mappings":"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"}