{"version":3,"sources":["context/context.tsx","store/actions/action_types.tsx","store/reducers/auth_reducer.tsx","store/reducers/search_reducer.tsx","context/history.tsx","components/About.tsx","components/404.tsx","components/error/index.tsx","components/spinner/index.tsx","components/article-list/index.tsx","utils/date.tsx","components/article-detail/index.tsx","context/authcheck.tsx","components/edit-article-list/index.tsx","constants.tsx","utils/comm.tsx","components/edit-article-detail/index.tsx","components/new-article-detail/index.tsx","components/category-list/index.tsx","components/category-detail/index.tsx","components/header/index.tsx","components/login/index.tsx","components/empty/index.tsx","routes.tsx","components/tracking/index.tsx","components/login/auth.tsx","context/context_state_config.tsx","store/actions/index.tsx","components/App.tsx","reportWebVitals.ts","serviceWorker.ts","index.tsx","utils/apollo.tsx"],"names":["ContentContext","createContext","LOGIN_SUCCESS","LOGIN_FAILURE","SEARCH_INPUT_CHANGE","SEARCH_INPUT_SUBMIT","initialState","is_authenticated","profile","email","name","AuthReducer","state","action","console","log","type","ACTION_TYPES","search_textChange","search_textSubmit","SearchReducer","payload","Error","createBrowserHistory","About","useEffect","window","history","replaceState","Helmet","content","Page404","props","error","Spinner","className","GET_ARTICLES","gql","ArticleList","context","useContext","query","result","data","loading","category","match","params","articles","filter","item","title","concat","description","searchString","useContextChangeState","toLowerCase","foundByCategory","categories","some","c","url","search","map","article","articleIndex","id","articleId","to","path","onClick","location","href","icon","src","alt","categoryIndex","authState","timeDifferenceForDate","date","current","previous","milliSecondsPerMinute","milliSecondsPerHour","milliSecondsPerDay","milliSecondsPerMonth","milliSecondsPerYear","elapsed","Math","round","timeDifference","Date","getTime","GetDateTime","undefined","dt","Intl","DateTimeFormat","year","month","day","hour","minute","format","GET_ARTICLE","ArticleDetail","variables","parseInt","htmlAttributes","lang","meta","keywords","link","rel","dangerouslySetInnerHTML","__html","lastUpdated","publishDate","AuthCheck","Context","authObj","isAuthenticated","handleUserLogin","replace","handleUserLogout","EditArticleList","AUTH_TOKEN","requestOptions","mode","cache","credentials","headers","redirect","referrer","http","request","a","fetch","response","json","parsedBody","ok","statusText","post","body","args","method","JSON","stringify","Request","Authenticate","username","password","process","PersistArticle","formData","jsonToFormData","localStorage","getItem","buildFormData","parentKey","File","value","append","Object","keys","forEach","key","index","Array","FormData","modules","toolbar","formats","EditArticleDetail","useQuery","useState","mainCategory","categoryId","isDefault","setState","handleChange","e","target","_confirm","articleResponse","categoryList","htmlFor","placeholder","onChange","newList","newMain","push","handleMainCategoryChange","i","selected","length","checked","isFound","handleCategoryChange","text","delta","source","editor","disabled","toString","GET_CATEGORIES","NewArticleDetail","setcategoryList","CategoryList","GET_CATEGORY","CategoryDetail","articleCount","Header","isAuthorized","role","viewBox","width","height","rx","fill","y","event","useContextChange","logout","login","preserveAspectRatio","shapeRendering","d","xlinkHref","x","Login","redirectTo","prevState","handleAuth","Empty","ProtectedRoute","authenticationPath","routeProps","pathname","Routes","trackingId","setTimeout","_","GA4React","initialize","catch","err","initGA","exact","component","Auth","userProfile","user","token","setItem","expiresAt","getProfile","getAccessToken","removeItem","expires","parse","auth","ContextState","useReducer","stateAuthReducer","dispatchAuthReducer","handleLogin","handleLogout","stateSearchReducer","dispatchSearchReducer","handleFormChange","handleFormSubmit","preventDefault","persist","Provider","useContextSubmitState","useContextSubmit","profileState","hash","handleAuthentication","App","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","Boolean","hostname","client","httpLink","createHttpLink","uri","InMemoryCache","ApolloClient","makeApolloClient","ReactDOM","render","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.f70ff2e6.chunk.js","sourcesContent":["import { createContext } from 'react'\r\nimport Auth from '../components/login/auth'\r\nimport Profile from '../store/types/profile'\r\n\r\ninterface IContentContext {\r\n searchString: string,\r\n\tuseContextChangeState: string;\r\n\tuseContextSubmitState: () => void;\r\n useContextSubmit: (event: any) => void;\r\n useContextChange: (event: any) => void;\r\n\r\n authState: boolean;\r\n profileState: Profile;\r\n\r\n handleUserLogin: () => void;\r\n handleUserLogout: () => void;\r\n\r\n handleAuth: (props: any) => void;\r\n authObj: Auth;\r\n}\r\n\r\n// const warningObject = {\r\n// \tget foo() {\r\n// \t\tthrow new Error('You probably forgot to put .');\r\n// \t},\r\n// };\r\n\r\n//const ContentContext = createContext>({})\r\nconst ContentContext = createContext({} as IContentContext)\r\n\r\nexport default ContentContext\r\n\r\n/*\r\n\r\nexport default ContentContext = createContext(warningObject)\r\n\r\n//export const ContentProvider = ContentContext.Provider\r\n\r\n\r\n*/\r\n","export const SUCCESS = \"SUCCESS\"\r\n\r\nexport const FAILURE = \"FAILURE\"\r\n\r\nexport const LOGIN_SUCCESS = \"LOGIN_SUCCESS\"\r\n\r\nexport const LOGIN_FAILURE = \"LOGIN_FAILURE\"\r\n\r\n// export const ADD_PROFILE = \"ADD_PROFILE\"\r\n\r\n// export const REMOVE_PROFILE = \"REMOVE_PROFILE\"\r\n\r\nexport const SEARCH_INPUT_CHANGE = \"SEARCH_INPUT_CHANGE\"\r\n\r\nexport const SEARCH_INPUT_SUBMIT = \"SEARCH_INPUT_SUBMIT\"","import * as ACTION_TYPES from '../actions/action_types'\r\n// import Profile from '../types/profile'\r\n\r\nexport const initialState = {\r\n is_authenticated: false,\r\n profile: {\r\n\t\temail: \"\",\r\n\t\tname: \"\"\r\n\t}\r\n}\r\n\r\nexport const AuthReducer = (state = initialState, action: any) => {\r\n console.log('auth reduced')\r\n switch(action.type) {\r\n case ACTION_TYPES.LOGIN_SUCCESS:\r\n return {\r\n ...state,\r\n is_authenticated: true\r\n }\r\n case ACTION_TYPES.LOGIN_FAILURE:\r\n return {\r\n ...state,\r\n is_authenticated: false\r\n }\r\n // case ACTION_TYPES.ADD_PROFILE:\r\n // return {\r\n // ...state,\r\n // profile: action.payload\r\n // }\r\n // case ACTION_TYPES.REMOVE_PROFILE:\r\n // return {\r\n // ...state,\r\n // profile: null\r\n // }\r\n default:\r\n return state\r\n }\r\n}","import * as ACTION_TYPES from '../actions/action_types'\r\n\r\ninterface ISearchState {\r\n search_textChange: string,\r\n search_textSubmit: string,\r\n}\r\n\r\nexport const initialState: ISearchState = {\r\n search_textChange: '',\r\n search_textSubmit: ''\r\n}\r\n\r\nexport const SearchReducer = (state: ISearchState, action: any) => {\r\n switch(action.type) {\r\n case ACTION_TYPES.SEARCH_INPUT_CHANGE:\r\n return {\r\n ...state,\r\n search_textChange: action.payload\r\n }\r\n case ACTION_TYPES.SEARCH_INPUT_SUBMIT:\r\n return {\r\n ...state,\r\n search_textSubmit: action.payload\r\n }\r\n default:\r\n throw new Error();\r\n }\r\n}","import { createBrowserHistory } from 'history'\r\n\r\nexport default createBrowserHistory()","import { useEffect } from 'react';\r\nimport { Helmet } from 'react-helmet';\r\n\r\nfunction About () {\r\n useEffect(() => {\r\n window.history.replaceState(null, '', \"/about\");\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n .: cmiddelweerd | Over ...\r\n \r\n \r\n\r\n

Over mij

\r\n

\r\n Deze website is het resultaat van mijn achtegrond als software ontwikkelaar: \r\n Ik ben een C#, Azure certified (web) developer met brede interesses. \r\n Het ontbrak mij nog aan een (online) plek, waar ik mijn (opgedane) kennis kan uitproberen en ik beschrijf wat ik heb kunnen leren. \r\n Het is enkel en alleen voor mijzelf bedoeld, maar wellicht dat jij toch net dat stukje informatie vind, om je verder te helpen bij jouw probleem.\r\n

\r\n\r\n

\r\n Wat is mijn motiviatie en wat ik wil bereiken is dat: \r\n

\r\n
    \r\n
  • Ik wil iedere dag een brug kunnen zijn tussen business en it
  • \r\n
  • Een toegevoegde waarde zijn voor mensen en waarde toevoegen aan bedrijven
  • \r\n
  • Een professional zijn in mijn werk
  • \r\n
\r\n\r\n

\r\n Wat vind ik (iedere dag weer) belangrijk:\r\n

\r\n
    \r\n
  • Een agile mindset hebben, verbeter iedere dag (iets)
  • \r\n
  • Proactief zijn maar wel blijven luister en observeren
  • \r\n
  • Coachende lead zijn (lead by example, just do it)
  • \r\n
  • Integer zijn
  • \r\n
  • Plezier hebben/maken (een beetje ondeugend zijn)
  • \r\n
\r\n\r\n\r\n

Over deze website

\r\n

\r\n Op deze website maakt gebruik van heel veel verschillende technieken, desing patters, overwegingen en een veelvoud van gebruikte oplossingen.\r\n Op de back end maak ik gebruik van o.a. .Net Core, GraphQL, HATEOAS, CQRS, Dapper.Net en Entity Framework.\r\n En de front is gerealiseerd met React.\r\n

\r\n

\r\n Wat ik heb geleerd vind je in de artikelen die ik heb geschreven met verwijzingen waar ik het heb gevonden. \\\r\n Op deze manier heb ik mijzelf heel wat kunnen leren.\r\n

\r\n\r\n
\r\n )\r\n}\r\n\r\nexport default About","function Page404 () {\r\n return (\r\n
\r\n

Pagina niet gevonden

\r\n De pagina waar je naar opzoek was, is niet gevonden!\r\n
\r\n )\r\n}\r\n\r\nexport default Page404","interface ErrorProps {\r\n error: any,\r\n }\r\n function Error (props: ErrorProps) {\r\n return (\r\n
\r\n {props.error}\r\n
\r\n )\r\n }\r\n \r\n export default Error","import './spinner.css';\r\n\r\nfunction Spinner() {\r\n return (\r\n
\r\n
\r\n
Fetching data ...
\r\n
\r\n)}\r\n\r\nexport default Spinner","import { useContext } from 'react';\r\nimport { Query } from 'react-apollo';\r\nimport { Link, RouteComponentProps } from 'react-router-dom';\r\n\r\nimport { IArticle, ICategory } from '../../store/interfaces';\r\nimport { Event } from '../tracking';\r\nimport ContentContext from '../../context/context';\r\nimport Error from '../error';\r\nimport Spinner from '../spinner';\r\n\r\nimport './article-list.css';\r\n\r\nimport { gql } from \"apollo-boost\";\r\n\r\nconst GET_ARTICLES = gql`{\r\n articles {\r\n articleId\r\n path\r\n title\r\n description\r\n categories {\r\n categoryId\r\n name\r\n icon\r\n url\r\n }\r\n }\r\n}`; \r\n\r\ninterface ArticleListRoutingProps {\r\n category: string,\r\n} \r\n\r\nfunction ArticleList(props: RouteComponentProps) {\r\n const context = useContext(ContentContext)\r\n \r\n return (\r\n \r\n {(result: any) => {\r\n const { data, loading, error } = result;\r\n\r\n if (loading) return \r\n if (error) return \r\n\r\n const category = props.match.params.category || '';\r\n\r\n const articles = data.articles.filter((item: IArticle) => {\r\n let content = item.title.concat(item.description);\r\n let searchString = (context.useContextChangeState || '').toLowerCase();\r\n\r\n let foundByCategory = category === '' || item.categories.some((c: ICategory) => (c.url || '') === category);\r\n\r\n return content.toLowerCase().search(searchString) !== -1 && foundByCategory;\r\n })\r\n\r\n return (\r\n
\r\n { articles.map((article: IArticle, articleIndex: number) => \r\n
\r\n
\r\n {\r\n Event(\r\n `${article.categories[0].name}`, \r\n `Title ${article.title}`, \r\n `Article title ${article.title}`);\r\n window.location.href= `/artikelen/${article.path}`;\r\n }}>\r\n {article.title}\r\n
\r\n
\r\n { article.categories[0].icon !== null\r\n ? {\r\n Event(\r\n `${article.categories[0].name}`, \r\n `Image ${article.title}`, \r\n `Article image ${article.title}`);\r\n window.location.href= `/artikelen/${article.path}`;\r\n }}>\r\n {`Categorie\r\n \r\n : <>}\r\n {article.description} \r\n {\r\n Event(\r\n `${article.categories[0].name}`, \r\n `More ${article.title}`, \r\n `Article more ${article.title}`);\r\n window.location.href= `/artikelen/${article.path}`;\r\n }}>\r\n .: verder lezen :.\r\n
\r\n
{ \r\n article.categories.map((category: ICategory, categoryIndex: number) => \r\n
{categoryIndex === 0 ? `` : ` | `}{category.name}
\r\n )}\r\n
\r\n { context.authState ?\r\n
\r\n bewerken\r\n
\r\n : null}\r\n
\r\n )}\r\n
)\r\n }}\r\n
)\r\n}\r\n\r\nexport default ArticleList","function timeDifference(current: number, previous: number): string {\r\n const milliSecondsPerMinute = 60 * 1000\r\n const milliSecondsPerHour = milliSecondsPerMinute * 60\r\n const milliSecondsPerDay = milliSecondsPerHour * 24\r\n const milliSecondsPerMonth = milliSecondsPerDay * 30\r\n const milliSecondsPerYear = milliSecondsPerDay * 365\r\n \r\n const elapsed = current - previous\r\n \r\n if (elapsed < milliSecondsPerMinute / 3) {\r\n return 'just now'\r\n }\r\n \r\n if (elapsed < milliSecondsPerMinute) {\r\n return 'minder dan 1 minuut geleden'\r\n } else if (elapsed < milliSecondsPerHour) {\r\n return Math.round(elapsed / milliSecondsPerMinute) + ' minuten geleden'\r\n } else if (elapsed < milliSecondsPerDay) {\r\n return Math.round(elapsed / milliSecondsPerHour) + ' uur geleden'\r\n } else if (elapsed < milliSecondsPerMonth) {\r\n return Math.round(elapsed / milliSecondsPerDay) + ' dagen geleden'\r\n } else if (elapsed < milliSecondsPerYear) {\r\n return Math.round(elapsed / milliSecondsPerMonth) + ' maanden geleden'\r\n } else {\r\n return Math.round(elapsed / milliSecondsPerYear) + ' jaar geleden'\r\n }\r\n }\r\n \r\n export function timeDifferenceForDate(date: Date): string {\r\n const now: number = new Date().getTime()\r\n const updated: number = new Date(date).getTime()\r\n return timeDifference(now, updated)\r\n }\r\n\r\nexport function GetDateTime(date: Date | undefined): string {\r\n if (date === undefined || date === null)\r\n return '';\r\n\r\n let dt = new Date(date);\r\n return new Intl.DateTimeFormat('nl-NL', {year: 'numeric', month: '2-digit',day: '2-digit', hour: '2-digit', minute: '2-digit'}).format(dt);\r\n}","import { useContext } from 'react';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { Helmet } from 'react-helmet';\r\nimport { Query } from 'react-apollo';\r\nimport { gql } from 'apollo-boost';\r\n\r\nimport { timeDifferenceForDate } from '../../utils/date';\r\nimport Spinner from '../spinner';\r\nimport Error from '../error';\r\nimport ContentContext from '../../context/context';\r\nimport { Link } from 'react-router-dom';\r\n\r\n// import '../../styles/Category.css';\r\n\r\ninterface ArticleDetailProps {\r\n category: string,\r\n id: string,\r\n name: string,\r\n option: string,\r\n}\r\n\r\nconst GET_ARTICLE = gql`\r\nquery getArticle($id: Int!) {\r\n articles(id: $id) {\r\n articleId\r\n title\r\n description\r\n content\r\n keywords\r\n publishDate\r\n lastUpdated\r\n path\r\n categories {\r\n categoryId\r\n name\r\n icon\r\n isDefault\r\n }\r\n }\r\n categories {\r\n categoryId\r\n name\r\n }\r\n}`;\r\n\r\nfunction ArticleDetail(props: RouteComponentProps) {\r\n const context = useContext(ContentContext)\r\n \r\n return (\r\n \r\n {(result: any) => {\r\n\r\n const { data, loading, error } = result;\r\n\r\n if (loading) return \r\n if (error) return \r\n \r\n const article = data.articles[0];\r\n\r\n function createMarkup() {\r\n return {__html: article.content};\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n {article.title}\r\n
\r\n
\r\n {article.description} \r\n
\r\n
\r\n
\r\n
\r\n Laatste wijziging: {timeDifferenceForDate(article.lastUpdated)}
\r\n Gepubliceerd: {timeDifferenceForDate(article.publishDate)}\r\n
\r\n
{ \r\n article.categories.map((category: { name: React.ReactNode; }, categoryIndex: number) => \r\n
{categoryIndex === 0 ? `` : ` | `}{category.name}
\r\n )}
\r\n {context.authState ?\r\n
\r\n bewerken\r\n
\r\n : null}\r\n\r\n
\r\n\r\n )\r\n }}\r\n
)\r\n}\r\n\r\nexport default ArticleDetail","import { useEffect, useContext } from 'react';\r\nimport history from './history';\r\nimport Context from './context';\r\n\r\nconst AuthCheck = () => {\r\n const context = useContext(Context)\r\n\r\n useEffect(() => {\r\n\r\n if(context.authObj.isAuthenticated()) {\r\n context.handleUserLogin()\r\n// context.handleUserAddProfile(context.authObj.userProfile)\r\n history.replace('/')\r\n }\r\n else {\r\n context.handleUserLogout()\r\n// context.handleUserRemoveProfile()\r\n history.replace('/')\r\n }\r\n }, [])\r\n\r\n return(\r\n
\r\n )}\r\n\r\nexport default AuthCheck;","import { Query } from 'react-apollo';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport { IArticle } from '../../store/interfaces';\r\nimport { GetDateTime } from '../../utils/date';\r\n\r\nimport Error from '../error';\r\nimport Spinner from '../spinner';\r\nimport { gql } from \"apollo-boost\";\r\n\r\nconst GET_ARTICLES = gql`{\r\n articles {\r\n articleId\r\n path\r\n title\r\n description\r\n categories {\r\n categoryId\r\n name\r\n icon\r\n url\r\n }\r\n }\r\n}`; \r\n\r\nfunction EditArticleList() {//props: Route) {\r\n console.log('Running EditArticleList()')\r\n\r\n return (\r\n \r\n {(result: any) => {\r\n const { data, loading, error } = result;\r\n\r\n if (loading) return \r\n if (error) return \r\n \r\n return (\r\n
\r\n {\r\n window.location.href= `/artikelen/admin/new`;\r\n }}>Artikel toevoegen\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {data.articles.map((article: IArticle, articleIndex: number) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
IdTitelPublicatie 
{article.articleId}{article.title}{GetDateTime(article.publishDate)}\r\n {\r\n window.location.href= `/artikelen/admin/edit/${article.articleId}`;\r\n }}\r\n >bewerk\r\n { article.publishDate === null\r\n ? <> | publiceer\r\n : <>\r\n } \r\n
\r\n
\r\n )\r\n }}\r\n
)\r\n}\r\n\r\nexport default EditArticleList","export const AUTH_TOKEN = 'access_token';\r\n","import { IArticleRequest } from \"../store/interfaces\";\r\nimport { AUTH_TOKEN } from \"../constants\";\r\n\r\ninterface HttpResponse extends Response {\r\n parsedBody?: T;\r\n}\r\n\r\nconst requestOptions: RequestInit = { \r\n mode: \"cors\", // no-cors, cors, *same-origin\r\n cache: \"no-cache\", // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: \"omit\", // include, *same-origin, omit\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n redirect: \"follow\", // manual, *folslow, error\r\n referrer: \"client\", // no-referrer, *client\r\n}\r\n\r\nexport async function http(\r\n request: RequestInfo\r\n ): Promise> {\r\n const response: HttpResponse = await fetch(\r\n request\r\n );\r\n \r\n try {\r\n // may error if there is no body\r\n response.parsedBody = await response.json();\r\n } catch (ex) {}\r\n \r\n if (!response.ok) {\r\n throw new Error(response.statusText);\r\n }\r\n return response;\r\n}\r\n\r\nexport async function get(\r\n path: string,\r\n args: RequestInit = { method: \"get\" }\r\n ): Promise> {\r\n return await http(new Request(path, args));\r\n};\r\n \r\nexport async function post(\r\n path: string,\r\n body: any,\r\n args: RequestInit = { \r\n method: \"post\", \r\n mode: \"cors\", // no-cors, cors, *same-origin\r\n cache: \"no-cache\", // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: \"omit\", // include, *same-origin, omit\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n redirect: \"follow\", // manual, *folslow, error\r\n referrer: \"client\", // no-referrer, *client\r\n body: JSON.stringify(body) }\r\n ): Promise> {\r\n return await http(new Request(path, args));\r\n};\r\n \r\nexport async function put(\r\n path: string,\r\n body: any,\r\n args: RequestInit = { method: \"put\", body: JSON.stringify(body) }\r\n ): Promise> {\r\n return await http(new Request(path, args));\r\n};\r\n\r\nexport interface IUser {\r\n id: number\r\n password: null\r\n token: string\r\n userName: string\r\n}\r\n\r\nexport async function Authenticate(username: string, password: string) : Promise {\r\n var url = `${process.env.REACT_APP_API_URL}/api/v1/users`;\r\n var data = {username: username, password: password }\r\n\r\n requestOptions.body = JSON.stringify(data);\r\n requestOptions.method = \"POST\";\r\n\r\n const response = await post(url, data, requestOptions);\r\n\r\n console.log(response.parsedBody);\r\n\r\n return response.parsedBody as IUser;\r\n}\r\n\r\nexport async function isAuthenticated() {\r\n const token = localStorage.getItem(AUTH_TOKEN);\r\n const url = `${process.env.REACT_APP_API_URL}/api/v1/users/isauthenticated?token=${token}`;\r\n\r\n if (token === null) {\r\n return false;\r\n }\r\n\r\n requestOptions.method = \"GET\";\r\n\r\n await get(url, requestOptions)\r\n .then((result) => {\r\n if (!(result.parsedBody as boolean)) {\r\n console.log(\"isAuthented logged out\");\r\n localStorage.removeItem(AUTH_TOKEN);\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"isAuthented error\", error);\r\n localStorage.removeItem(AUTH_TOKEN);\r\n });\r\n}\r\n\r\nexport async function PersistArticle(article: IArticleRequest) : Promise {\r\n let url = `${process.env.REACT_APP_API_URL}/api/v1/articles`;\r\n\r\n let formData = jsonToFormData(article, 'article');\r\n\r\n let requestOptions: RequestInit = { \r\n method: \"post\", \r\n mode: \"cors\", // no-cors, cors, *same-origin\r\n cache: \"no-cache\", // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: \"omit\", // include, *same-origin, omit\r\n headers: {\r\n // \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + localStorage.getItem(AUTH_TOKEN)\r\n },\r\n redirect: \"follow\", // manual, *folslow, error\r\n referrer: \"client\", // no-referrer, *client\r\n body: formData,\r\n }\r\n\r\n const response = await post(url, null, requestOptions)\r\n\r\n if (!response.ok) {\r\n console.log(response.statusText);\r\n }\r\n\r\n return response.ok;\r\n}\r\n\r\nexport async function UploadFile(articleId: number, files: FileList) {\r\n let url = `${process.env.REACT_APP_API_URL}/api/v1/articles/${articleId}/upload`;\r\n let formData = new FormData();\r\n\r\n for (let i=0; i < files.length; i++) {\r\n formData.append(`files`, files[i]);\r\n }\r\n\r\n let requestOptions: RequestInit = { \r\n method: \"post\", \r\n mode: \"cors\", // no-cors, cors, *same-origin\r\n cache: \"no-cache\", // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: \"omit\", // include, *same-origin, omit\r\n headers: {\r\n //\"Content-Type\": \"application/octet-stream\",\r\n //\"Content-Type\": \"multipart/form-data\",\r\n \"Authorization\": \"Bearer \" + localStorage.getItem(AUTH_TOKEN)\r\n },\r\n redirect: \"follow\", // manual, *folslow, error\r\n referrer: \"client\", // no-referrer, *client\r\n body: formData,\r\n }\r\n\r\n const response = await post(url, null, requestOptions)\r\n\r\n if (!response.ok) {\r\n console.log(response.statusText);\r\n }\r\n\r\n return response.parsedBody as boolean;\r\n}\r\n\r\nfunction buildFormData(formData: FormData, data: any, parentKey: string) {\r\n if (data && typeof data === 'object' && !(data instanceof Date) && !(data instanceof File)) {\r\n Object.keys(data).forEach((key, index) => {\r\n if (data instanceof Array) {\r\n buildFormData(formData, data[key as any], \r\n (parentKey ? `${parentKey}[${index}]` : key));\r\n }\r\n else {\r\n buildFormData(formData, data[key], \r\n (parentKey ? `${parentKey}.${key}` : key));\r\n }\r\n });\r\n } else {\r\n const value = data == null ? '' : data;\r\n\r\n formData.append(parentKey, value);\r\n }\r\n}\r\n\r\nfunction jsonToFormData(data: any, parentKey: string) : FormData {\r\n const formData = new FormData();\r\n\r\n buildFormData(formData, data, parentKey);\r\n\r\n return formData;\r\n}","import { useEffect, useState } from 'react';\r\nimport { useQuery } from 'react-apollo';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport ReactQuill from 'react-quill';\r\n\r\nimport { IArticleRequest, ICategory } from '../../store/interfaces';\r\nimport { PersistArticle } from '../../utils/comm';\r\nimport Error from '../error';\r\nimport Spinner from '../spinner';\r\n\r\nimport 'react-quill/dist/quill.snow.css';\r\nimport './edit-article-detail.css'\r\nimport { gql } from \"apollo-boost\";\r\n\r\nconst GET_ARTICLE = gql`\r\nquery getArticle($id: Int!) {\r\n articles(id: $id) {\r\n articleId\r\n title\r\n description\r\n content\r\n keywords\r\n publishDate\r\n lastUpdated\r\n path\r\n categories {\r\n categoryId\r\n name\r\n icon\r\n isDefault\r\n }\r\n }\r\n categories {\r\n categoryId\r\n name\r\n }\r\n}`;\r\n\r\ninterface EditArticleDetailProps {\r\n id: string,\r\n}\r\n\r\ninterface IArticleEditState {\r\n articleId: number,\r\n title: string,\r\n description: string,\r\n content: string,\r\n keywords: string,\r\n mainCategory: number,\r\n categories: ICategory[]\r\n}\r\n\r\nfunction EditArticleDetail(props: RouteComponentProps) {\r\n console.log('Running Edit article()')\r\n\r\n const { loading, error, data } = useQuery(GET_ARTICLE, { variables: { id: parseInt(props.match.params.id) } });\r\n const [ state, setState ] = useState(\r\n {\r\n articleId: -1,\r\n title: '',\r\n description: '',\r\n content: '',\r\n mainCategory: -1,\r\n categories: [ { categoryId: -1, name: '', icon: '', isDefault: false } ],\r\n keywords: '',\r\n });\r\n\r\n const handleChange = (e: any) => {\r\n const { name, value } = e.target; \r\n setState({\r\n ...state,\r\n [name]: value\r\n });\r\n }; \r\n\r\n const handleCategoryChange = (id: number) => {\r\n const isFound = state.categories.filter((item: ICategory, index) =>\r\n item.categoryId === id\r\n ).length > 0;\r\n\r\n const newList = state.categories.filter((item: ICategory) => item.categoryId !== id);\r\n\r\n if (!isFound)\r\n {\r\n newList.push({\r\n categoryId: id, \r\n isDefault: false})\r\n }\r\n\r\n setState({\r\n ...state,\r\n categories: newList\r\n })\r\n }\r\n\r\n const handleMainCategoryChange = (id: number) => {\r\n const newList = state.categories.filter((item: ICategory) => item.isDefault === false);\r\n\r\n const newMain = categoryList.filter((item: ICategory, index) =>\r\n item.categoryId === id\r\n )[0];\r\n\r\n newList.push({\r\n categoryId: newMain.categoryId, \r\n isDefault: true})\r\n \r\n setState({\r\n ...state,\r\n categories: newList\r\n })\r\n }\r\n\r\n const _confirm = async () => {\r\n const request: IArticleRequest = {\r\n articleId: state.articleId,\r\n title: state.title,\r\n description: state.description,\r\n content: state.content,\r\n categories: state.categories,\r\n keywords: state.keywords,\r\n }\r\n\r\n const articleResponse = await PersistArticle(request)\r\n\r\n console.log(\"Response \", articleResponse);\r\n\r\n if (articleResponse) {\r\n window.location.href= \"/artikelen/admin\";\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if(loading === false && data){\r\n setState(data.articles[0]);\r\n }\r\n }, [loading, data])\r\n\r\n if (loading) return \r\n if (error) return \r\n\r\n const categoryList : ICategory[] = data.categories;\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n