PageSourceSearch

https://frimurer.no/assets/MediaPulseMentionBulk-BqKrcQkq.js

js frimurer.no collected 2026-10-02 12:14:39 UTC 6,631 bytes, 2 lines download raw bytes

1import{u as W,r as d,j as t,L as H}from"./vendor-react-GnwsTJfO.js";import{u as K}from"./useAdminAuth-B8BfgGDM.js";import{A as X}from"./AdminPageLayout-C-5u9ay7.js";import{M as Y}from"./MediaPulseTabs-86p-GO0t.js";import{f as u,C as G,g as J,i as Q,j as Z,k as ee,l as te,m as se,B as L,a2 as R,V as I}from"./index-Bk3sb3g_.js";import{T as ae}from"./textarea-DX8aEp-d.js";import{L as T}from"./label-CC4lcsSO.js";import{S as re,i as ne}from"./mediepuls-DTpXr86E.js";import{E as ie}from"./external-link-BCPKGj30.js";import{C as le}from"./circle-alert-C33XTStY.js";import{C as oe}from"./circle-x-DAuLvfD-.js";import{C as me}from"./circle-check-HbOHiPuy.js";import"./vendor-cjs-BcELrC9x.js";import"./AdminNavigation-DVMee0wC.js";import"./vendor-ui-C1xCQL2z.js";import"./MasonicCross-CB_Vslf8.js";import"./vendor-utils-B2rm_Apj.js";import"./vendor-query-Dp4tHR6-.js";import"./image-CJtwgLmH.js";import"./users-Cq75-41X.js";import"./alert-dialog-DFLKEqsc.js";import"./vendor-supabase-BWPZKnGU.js";const de=p=>{try{const r=new URL(p.trim());r.hash="",r.search="";let n=`${r.protocol}//${r.host.toLowerCase()}${r.pathname}`;return n.length>1&&n.endsWith("/")&&(n=n.slice(0,-1)),n}catch{return p.trim()}},Fe=()=>{const{loading:p,role:r,user:n}=K({requiredRoles:["webmaster"]}),U=W(),[b,F]=d.useState(""),[y,A]=d.useState("lokalavis"),[o,k]=d.useState([]),[g,S]=d.useState(!1),[E,z]=d.useState([]);d.useEffect(()=>{r==="webmaster"&&(async()=>{const{data:e}=await u.from("media_sources").select("name,url,source_type").eq("is_active",!0);z(e??[])})()},[r]);const l=(e,m)=>k(s=>s.map((x,c)=>c===e?{...x,...m}:x)),B=async(e,m)=>{const s=m.trim();if(!s){l(e,{status:"error",message:"Tom URL"});return}const x=de(s),{data:c}=await u.from("media_mentions").select("id, title").eq("normalized_url",x).maybeSingle();if(c){l(e,{status:"duplicate",message:"Finnes allerede",mentionId:c.id,title:c.title});return}l(e,{status:"scraping"});let i=null;try{const{data:a,error:C}=await u.functions.invoke("mediapulse-scrape-url",{body:{url:s}});if(C)throw C;i=(a==null?void 0:a.data)??{}}catch{i={}}const N=i.title||s,_=ne(s,E),$=_.source_name||i.site_name||i.source_hostname||null,P=_.source_type||y,V=i.description||null;let w,f;if(i.published_at){const a=new Date(i.published_at);isNaN(a.getTime())?(f=new Date().toISOString(),w="Fant ugyldig publiseringsdato — satt til i dag, rediger manuelt"):f=a.toISOString()}else f=new Date().toISOString(),w="Fant ingen publiseringsdato — satt til i dag, rediger manuelt";const q=i.is_paywalled?"paywall":"open";l(e,{status:"saving",title:N});const{data:v,error:j}=await u.from("media_mentions").insert({title:N,url:s,source_name:$,source_type:P,access_type:q,published_at:f,excerpt:V,created_by:(n==null?void 0:n.id)??null}).select("id").single();if(j||!v){l(e,{status:"error",message:"Lagring feilet: "+((j==null?void 0:j.message)??"ukjent")});return}l(e,{status:"analyzing",mentionId:v.id});try{const{error:a}=await u.functions.invoke("mediapulse-analyze",{body:{mention_id:v.id}});if(a)throw a;l(e,{status:"done",message:w||"OK"})}catch(a){l(e,{status:"done",message:"Lagret, men analyse feilet: "+((a==null?void 0:a.message)??"ukjent")})}},O=async()=>{const e=b.split(/\r?\n/).map(s=>s.trim()).filter(s=>s.length>0);if(e.length===0){I.error("Legg inn minst én URL");return}const m=e.map(s=>({url:s,status:"pending"}));k(m),S(!0);for(let s=0;s<e.length;s++)await B(s,e[s]);S(!1),I.success(`Ferdig: ${e.length} URLer behandlet`)};if(p||r!=="webmaster")return null;const D=e=>{switch(e){case"done":return t.jsx(me,{className:"h-4 w-4 text-green-600"});case"error":return t.jsx(oe,{className:"h-4 w-4 text-red-600"});case"duplicate":return t.jsx(le,{className:"h-4 w-4 text-amber-600"});case"pending":return t.jsx("span",{className:"h-4 w-4 inline-block rounded-full border border-muted"});default:return t.jsx(R,{className:"h-4 w-4 animate-spin text-muted-foreground"})}},M=e=>({pending:"Venter",scraping:"Henter metadata…",saving:"Lagrer…",analyzing:"Analyserer…",done:"Ferdig",duplicate:"Duplikat",error:"Feil"})[e],h=o.length?{done:o.filter(e=>e.status==="done").length,dup:o.filter(e=>e.status==="duplicate").length,err:o.filter(e=>e.status==="error").length}:null;return t.jsxs(X,{title:"Batch-innlegging av omtaler",breadcrumbs:[{label:"Mediepuls",href:"/admin/mediepuls"},{label:"Omtaler",href:"/admin/mediepuls/omtaler"},{label:"Batch"}],children:[t.jsx(Y,{}),t.jsx(G,{className:"max-w-4xl",children:t.jsxs(J,{className:"pt-6 space-y-4",children:[t.jsxs("div",{children:[t.jsx(T,{children:"URLer (én per linje)"}),t.jsx(ae,{rows:10,value:b,onChange:e=>F(e.target.value),placeholder:`https://eksempel.no/artikkel-1
2https://eksempel.no/artikkel-2`,disabled:g,className:"font-mono text-sm"}),t.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Systemet sjekker for duplikater, henter metadata (tittel, kilde, dato, utdrag), lagrer omtalen og kjører AI-analyse for hver URL. Tomme felter etter scraping kan redigeres etterpå."})]}),t.jsx("div",{className:"grid gap-4 md:grid-cols-2",children:t.jsxs("div",{children:[t.jsx(T,{children:"Standard kildetype"}),t.jsxs(Q,{value:y,onValueChange:A,disabled:g,children:[t.jsx(Z,{children:t.jsx(ee,{})}),t.jsx(te,{children:re.map(e=>t.jsx(se,{value:e.value,children:e.label},e.value))})]})]})}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx(L,{onClick:O,disabled:g||!b.trim(),children:g?t.jsxs(t.Fragment,{children:[t.jsx(R,{className:"mr-2 h-4 w-4 animate-spin"})," Behandler…"]}):"Start batch-innlegging"}),t.jsx(L,{type:"button",variant:"outline",onClick:()=>U("/admin/mediepuls/omtaler"),children:"Tilbake"})]}),h&&t.jsxs("div",{className:"text-sm text-muted-foreground border-t pt-3",children:[h.done," ferdig · ",h.dup," duplikat · ",h.err," feil · totalt ",o.length]}),o.length>0&&t.jsx("div",{className:"border rounded-lg divide-y",children:o.map((e,m)=>t.jsxs("div",{className:"flex items-start gap-3 p-3 text-sm",children:[t.jsx("div",{className:"mt-0.5",children:D(e.status)}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsx("div",{className:"truncate font-medium",children:e.title||e.url}),t.jsx("div",{className:"truncate text-xs text-muted-foreground",children:e.url}),e.message&&t.jsx("div",{className:"text-xs mt-1 text-muted-foreground",children:e.message})]}),t.jsx("div",{className:"text-xs text-muted-foreground whitespace-nowrap",children:M(e.status)}),e.mentionId&&t.jsxs(H,{to:`/admin/mediepuls/omtaler/${e.mentionId}`,className:"text-xs inline-flex items-center gap-1 text-primary hover:underline",children:["Åpne ",t.jsx(ie,{className:"h-3 w-3"})]})]},m))})]})})]})};export{Fe as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.