{"version":3,"sources":["webpack:///./node_modules/core-js/modules/es.regexp.to-string.js","webpack:///./src/api/client/blog/Blog.client.ts","webpack:///./src/view/blog/component/BlogPost.component.vue?5230","webpack:///./src/view/blog/Blog.view.vue?156d","webpack:///./src/view/blog/component/BlogPost.component.vue?378e","webpack:///./src/view/blog/component/BlogPost.component.vue?3d61","webpack:///./src/view/blog/component/BlogPost.component.vue","webpack:///./src/view/blog/Blog.view.vue?382f","webpack:///./src/view/blog/Blog.view.vue","webpack:///./src/view/blog-post/BlogPost.view.vue?0ebf","webpack:///./src/view/blog-post/BlogPost.view.vue?868f","webpack:///./src/view/blog-post/BlogPost.view.vue","webpack:///./src/view/blog-post/BlogPost.view.vue?387d","webpack:///./node_modules/core-js/internals/regexp-flags.js","webpack:///./src/view/blog-post-edit/BlogPostEdit.view.vue?6698","webpack:///./src/view/blog-post-edit/BlogPostEdit.view.vue?9900","webpack:///./src/view/blog-post-edit/BlogPostEdit.view.vue","webpack:///./src/view/blog/Blog.view.vue?af11"],"names":["uncurryThis","PROPER_FUNCTION_NAME","PROPER","redefine","anObject","isPrototypeOf","$toString","fails","regExpFlags","TO_STRING","RegExpPrototype","RegExp","prototype","n$ToString","getFlags","NOT_GENERIC","call","source","flags","INCORRECT_NAME","name","R","this","p","rf","f","undefined","unsafe","BlogClient","page","get","params","response","data","result","urlSlug","reference","request","authorizationResult","Error","post","headers","put","blogClient","_hoisted_1","key","_hoisted_2","_hoisted_3","class","_hoisted_4","_hoisted_5","_hoisted_6","render","_ctx","_cache","$props","$setup","$data","$options","_component_PageTitleComponent","_component_LoadingComponent","_component_UserMessageComponent","_component_AddIcon","_component_ButtonComponent","_component_router_link","_component_PageActionsBarComponent","_component_BlogPostComponent","_component_ArrowLeftIconComponent","_component_ArrowRightIconComponent","_component_PageContentComponent","default","title","isLoading","message","details","userMessage","isVisible","isAdmin","right","to","_","blogPosts","blogPost","maxPages","center","currentPage","routerPrevPage","routerNextPage","_component_FileIcon","width","height","displayPostedAt","displayPostedAtDifference","summary","url","components","ButtonComponent","LinkComponent","FileIcon","props","type","Object","required","setup","postedAt","format","fromNow","__exports__","PageContentComponent","PageTitleComponent","LoadingComponent","UserMessageComponent","BlogPostComponent","PageActionsBarComponent","ArrowLeftIconComponent","ArrowRightIconComponent","AddIcon","route","authDetails","getAuthDetails","value","user","Admin","none","Number","query","total","pageSize","MAX_VALUE","Math","ceil","String","max","min","loadBlog","searchBlog","error","posts","map","x","content","_component_EditIcon","returnLink","returnText","fn","innerHTML","markdown","EditIcon","parse","getBlogPostByUrlSlug","module","exports","that","global","ignoreCase","multiline","dotAll","unicode","sticky","_hoisted_7","_component_LinkComponent","isNew","subheading","blogPostReference","loadUserMessage","placeholder","$event","titleField","urlSlugField","rows","summaryField","href","contentField","onClick","onUpdateBlogPost","submitUserMessage","router","toString","getBlogPostByReference","length","createBlogPost","success","push","path","updateBlogPost"],"mappings":"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","file":"js/blog.2973da82.js","sourcesContent":["'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar $toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar n$ToString = RegExpPrototype[TO_STRING];\nvar getFlags = uncurryThis(regExpFlags);\n\nvar NOT_GENERIC = fails(function () { return n$ToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = PROPER_FUNCTION_NAME && n$ToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = $toString(R.source);\n var rf = R.flags;\n var f = $toString(rf === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype) ? getFlags(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","import { apiClient, asAdminUser, handleError } from '@/api/ApiClient';\n\nimport { ApiResultResponse } from '@/api/type/ApiResponse.type';\nimport { SearchBlogResponse } from '@/api/client/blog/type/SearchBlog.type';\nimport { GetBlogPostByResponse } from '@/api/client/blog/type/GetBlogPostBy.type';\nimport { CreateBlogPostRequest, CreateBlogPostResponse } from './type/CreateBlogPost.type';\n\nclass BlogClient {\n\n public async searchBlog(page: number): Promise {\n try {\n const response = await apiClient.get>('/blog/posts', {\n params: {\n page,\n },\n });\n\n return response.data.result;\n }\n catch (error) {\n return handleError(error);\n }\n }\n\n public async getBlogPostByUrlSlug(urlSlug: string): Promise {\n try {\n const response = await apiClient.get>(`/blog/post/${urlSlug}`);\n\n return response.data.result;\n }\n catch (error) {\n return handleError(error);\n }\n }\n\n public async getBlogPostByReference(reference: string): Promise {\n try {\n const response = await apiClient.get>(`/blog/post/${reference}`);\n\n return response.data.result;\n }\n catch (error) {\n return handleError(error);\n }\n }\n\n public async createBlogPost(request: CreateBlogPostRequest): Promise {\n const authorizationResult = asAdminUser();\n if (authorizationResult instanceof Error)\n return authorizationResult;\n \n try {\n const response = await apiClient.post>('/blog/post', request, {\n headers: {\n 'Authorization': authorizationResult,\n },\n });\n\n return response.data.result;\n }\n catch (error) {\n return handleError(error);\n }\n }\n\n public async updateBlogPost(reference: string, request: CreateBlogPostRequest): Promise {\n const authorizationResult = asAdminUser();\n if (authorizationResult instanceof Error)\n return authorizationResult;\n \n try {\n const response = await apiClient.put>(`/blog/post/${reference}`, request, {\n headers: {\n 'Authorization': authorizationResult,\n },\n });\n\n return response.data.result;\n }\n catch (error) {\n return handleError(error);\n }\n }\n}\n\nexport const blogClient = new BlogClient();","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BlogPost.component.vue?vue&type=style&index=0&id=74d7403d&lang=scss\"","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createBlock as _createBlock, renderList as _renderList, Fragment as _Fragment, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = { key: 0 }\nconst _hoisted_2 = { key: 1 }\nconst _hoisted_3 = { class: \"blog-posts\" }\nconst _hoisted_4 = {\n key: 1,\n class: \"page-navigation\"\n}\nconst _hoisted_5 = { class: \"flex-auto text-center\" }\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode()\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_PageTitleComponent = _resolveComponent(\"PageTitleComponent\")!\n const _component_LoadingComponent = _resolveComponent(\"LoadingComponent\")!\n const _component_UserMessageComponent = _resolveComponent(\"UserMessageComponent\")!\n const _component_AddIcon = _resolveComponent(\"AddIcon\")!\n const _component_ButtonComponent = _resolveComponent(\"ButtonComponent\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_PageActionsBarComponent = _resolveComponent(\"PageActionsBarComponent\")!\n const _component_BlogPostComponent = _resolveComponent(\"BlogPostComponent\")!\n const _component_ArrowLeftIconComponent = _resolveComponent(\"ArrowLeftIconComponent\")!\n const _component_ArrowRightIconComponent = _resolveComponent(\"ArrowRightIconComponent\")!\n const _component_PageContentComponent = _resolveComponent(\"PageContentComponent\")!\n\n return (_openBlock(), _createBlock(_component_PageContentComponent, { class: \"blog-view\" }, {\n default: _withCtx(() => [\n _createVNode(_component_PageTitleComponent, { title: \"Blog\" }),\n (_ctx.isLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_LoadingComponent, { message: \"Loading Blog Posts\" })\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_UserMessageComponent, { details: _ctx.userMessage }, null, 8, [\"details\"]),\n (!_ctx.isLoading && !_ctx.userMessage.isVisible)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_ctx.isAdmin)\n ? (_openBlock(), _createBlock(_component_PageActionsBarComponent, { key: 0 }, {\n right: _withCtx(() => [\n _createVNode(_component_router_link, { to: \"/blog/post/edit\" }, {\n default: _withCtx(() => [\n _createVNode(_component_ButtonComponent, null, {\n default: _withCtx(() => [\n _createVNode(_component_AddIcon)\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"section\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.blogPosts, (blogPost) => {\n return (_openBlock(), _createBlock(_component_BlogPostComponent, {\n key: blogPost,\n blogPost: blogPost\n }, null, 8, [\"blogPost\"]))\n }), 128))\n ]),\n (_ctx.maxPages > 1)\n ? (_openBlock(), _createElementBlock(\"section\", _hoisted_4, [\n _createVNode(_component_PageActionsBarComponent, null, {\n center: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"flex-1 text-center\", { 'is-disabled': _ctx.currentPage === 1 }])\n }, [\n _createVNode(_component_router_link, { to: _ctx.routerPrevPage }, {\n default: _withCtx(() => [\n _createVNode(_component_ArrowLeftIconComponent)\n ]),\n _: 1\n }, 8, [\"to\"])\n ], 2),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.currentPage), 1),\n _hoisted_6,\n _createElementVNode(\"small\", null, \"/ \" + _toDisplayString(_ctx.maxPages), 1)\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"flex-1 text-center\", { 'is-disabled': _ctx.currentPage === _ctx.maxPages }])\n }, [\n _createVNode(_component_router_link, { to: _ctx.routerNextPage }, {\n default: _withCtx(() => [\n _createVNode(_component_ArrowRightIconComponent)\n ]),\n _: 1\n }, 8, [\"to\"])\n ], 2)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }))\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"blog-post-component flex gap flex-responsive\" }\nconst _hoisted_2 = { class: \"image-container flex-1 flex-vh-center text-center\" }\nconst _hoisted_3 = { class: \"content-container flex-2\" }\nconst _hoisted_4 = { class: \"flex gap-small\" }\nconst _hoisted_5 = { class: \"flex-1\" }\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"Read Full Post\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_FileIcon = _resolveComponent(\"FileIcon\")!\n const _component_ButtonComponent = _resolveComponent(\"ButtonComponent\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_FileIcon, {\n width: 48,\n height: 48\n })\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"h3\", null, _toDisplayString(_ctx.blogPost.title), 1),\n _createElementVNode(\"small\", null, _toDisplayString(_ctx.displayPostedAt) + \" (\" + _toDisplayString(_ctx.displayPostedAtDifference) + \")\", 1),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.blogPost.summary), 1),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_router_link, { to: _ctx.url }, {\n default: _withCtx(() => [\n _createVNode(_component_ButtonComponent, null, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"])\n ])\n ])\n ])\n ]))\n}","\nimport { computed, defineComponent, PropType } from 'vue';\n\nimport ButtonComponent from '@/component/Button.component.vue';\nimport LinkComponent from '@/component/Link.component.vue';\nimport FileIcon from '@/component/icon/FileIcon.component.vue';\n\nimport { BlogPost } from '@/model/BlogPost.model';\n\nexport default defineComponent({\n name: 'BlogPostComponent',\n\n components: {\n ButtonComponent,\n LinkComponent,\n FileIcon,\n },\n\n props: {\n blogPost: {\n type: Object as PropType,\n required: true,\n },\n },\n\n setup(props) {\n const displayPostedAt = computed(() => props.blogPost.postedAt.format('Do MMMM YYYY'));\n const displayPostedAtDifference = computed(() => props.blogPost.postedAt.fromNow());\n const url = computed(() => `/blog/post/${props.blogPost.urlSlug}`);\n\n return {\n displayPostedAt,\n displayPostedAtDifference,\n url,\n }\n },\n});\n","import { render } from \"./BlogPost.component.vue?vue&type=template&id=74d7403d&ts=true\"\nimport script from \"./BlogPost.component.vue?vue&type=script&lang=ts\"\nexport * from \"./BlogPost.component.vue?vue&type=script&lang=ts\"\n\nimport \"./BlogPost.component.vue?vue&type=style&index=0&id=74d7403d&lang=scss\"\n\nimport exportComponent from \"/home/wjbaker.com/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent, onMounted, reactive, ref, watch } from 'vue';\nimport { RouteLocationNormalizedLoaded, useRoute } from 'vue-router';\nimport dayjs from 'dayjs';\n\nimport PageContentComponent from '@/component/layout/PageContent.component.vue';\nimport PageTitleComponent from '@/component/layout/PageTitle.component.vue';\nimport PageActionsBarComponent from '@/component/layout/PageActionsBar.component.vue';\nimport LoadingComponent from '@/component/Loading.component.vue';\nimport ButtonComponent from '@/component/Button.component.vue';\nimport UserMessageComponent, { UserMessage } from '@/component/UserMessage.component.vue';\nimport BlogPostComponent from '@/view/blog/component/BlogPost.component.vue';\nimport ArrowLeftIconComponent from '@/component/icon/ArrowLeftIcon.component.vue';\nimport ArrowRightIconComponent from '@/component/icon/ArrowRightIcon.component.vue';\nimport AddIcon from '@/component/icon/PlusIcon.component.vue';\n\nimport { blogClient } from '@/api/client/blog/Blog.client';\nimport { userService } from '@/service/user/User.service';\n\nimport { BlogPost } from '@/model/BlogPost.model';\nimport { UserType } from '@/model/User.model';\n\nexport default defineComponent({\n name: 'BlogView',\n\n components: {\n PageContentComponent,\n PageTitleComponent,\n LoadingComponent,\n ButtonComponent,\n UserMessageComponent,\n BlogPostComponent,\n PageActionsBarComponent,\n ArrowLeftIconComponent,\n ArrowRightIconComponent,\n AddIcon,\n },\n\n setup() {\n const route = useRoute();\n\n const authDetails = userService.getAuthDetails();\n const isAdmin = computed(() => authDetails.value?.user.type === UserType.Admin);\n\n const blogPosts = ref>([]);\n const isLoading = ref(false);\n\n const userMessage = ref(UserMessage.none());\n\n const currentPage = computed(() => Number(route.query.page ?? 1));\n const total = ref(null);\n const pageSize = ref(null);\n\n const maxPages = computed(() => {\n if (total.value === null || pageSize.value === null)\n return Number.MAX_VALUE;\n\n return Math.ceil(total.value / pageSize.value);\n });\n\n const routerPrevPage = computed(() => ({\n ...route,\n query: {\n ...route.query,\n page: String(Math.max(1, currentPage.value - 1)),\n },\n }));\n const routerNextPage = computed(() => ({\n ...route,\n query: {\n ...route.query,\n page: String(Math.min(maxPages.value, currentPage.value + 1)),\n },\n }));\n\n const loadBlog = async function () {\n isLoading.value = true;\n userMessage.value = UserMessage.none();\n\n const result = await blogClient.searchBlog(currentPage.value);\n if (result instanceof Error) {\n isLoading.value = false;\n userMessage.value = UserMessage.error(result.message || 'Unable to load blog; please try refreshing the page.');\n return;\n }\n\n blogPosts.value = result.posts.map(x => ({\n reference: x.reference,\n title: x.title,\n urlSlug: x.urlSlug,\n postedAt: dayjs(x.postedAt),\n summary: x.summary,\n content: null\n }));\n\n total.value = result.total;\n pageSize.value = result.pageSize;\n\n isLoading.value = false;\n userMessage.value = UserMessage.none();\n };\n\n watch(currentPage, async () => {\n await loadBlog();\n });\n\n onMounted(async () => {\n await loadBlog();\n });\n\n return {\n isAdmin,\n blogPosts,\n userMessage,\n isLoading,\n currentPage,\n total,\n pageSize,\n maxPages,\n routerPrevPage,\n routerNextPage,\n }\n },\n});\n","import { render } from \"./Blog.view.vue?vue&type=template&id=25c5b748&ts=true\"\nimport script from \"./Blog.view.vue?vue&type=script&lang=ts\"\nexport * from \"./Blog.view.vue?vue&type=script&lang=ts\"\n\nimport \"./Blog.view.vue?vue&type=style&index=0&id=25c5b748&lang=scss\"\n\nimport exportComponent from \"/home/wjbaker.com/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createSlots as _createSlots, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"Posted:\", -1)\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_PageTitleComponent = _resolveComponent(\"PageTitleComponent\")!\n const _component_EditIcon = _resolveComponent(\"EditIcon\")!\n const _component_ButtonComponent = _resolveComponent(\"ButtonComponent\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_PageActionsBarComponent = _resolveComponent(\"PageActionsBarComponent\")!\n const _component_LoadingComponent = _resolveComponent(\"LoadingComponent\")!\n const _component_UserMessageComponent = _resolveComponent(\"UserMessageComponent\")!\n const _component_PageContentComponent = _resolveComponent(\"PageContentComponent\")!\n\n return (_openBlock(), _createBlock(_component_PageContentComponent, { class: \"blog-post-view\" }, {\n default: _withCtx(() => [\n _createVNode(_component_PageTitleComponent, {\n title: _ctx.blogPost?.title ?? 'Loading Blog Post'\n }, null, 8, [\"title\"]),\n _createVNode(_component_PageActionsBarComponent, {\n returnLink: \"/blog\",\n returnText: \"Return to Blog\"\n }, _createSlots({ _: 2 }, [\n (_ctx.blogPost !== null)\n ? {\n name: \"right\",\n fn: _withCtx(() => [\n _createElementVNode(\"div\", null, [\n _hoisted_1,\n _createTextVNode(\" \" + _toDisplayString(_ctx.displayPostedAt) + \" (\" + _toDisplayString(_ctx.displayPostedAtDifference) + \") \", 1)\n ]),\n (_ctx.isAdmin)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n to: `/blog/post/edit/${_ctx.blogPost.reference}`\n }, {\n default: _withCtx(() => [\n _createVNode(_component_ButtonComponent, null, {\n default: _withCtx(() => [\n _createVNode(_component_EditIcon)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ])\n }\n : undefined\n ]), 1024),\n (_ctx.isLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_LoadingComponent, { message: \"Loading Blog post\" })\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_UserMessageComponent, { details: _ctx.userMessage }, null, 8, [\"details\"]),\n (!_ctx.isLoading && !_ctx.userMessage.isVisible)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n innerHTML: _ctx.markdown\n }, null, 8, _hoisted_3))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }))\n}","\nimport { computed, defineComponent, onMounted, ref } from 'vue';\nimport { useRoute } from 'vue-router';\nimport dayjs from 'dayjs';\n\nimport PageContentComponent from '@/component/layout/PageContent.component.vue';\nimport PageTitleComponent from '@/component/layout/PageTitle.component.vue';\nimport PageActionsBarComponent from '@/component/layout/PageActionsBar.component.vue';\nimport ButtonComponent from '@/component/Button.component.vue';\nimport LinkComponent from '@/component/Link.component.vue';\nimport UserMessageComponent, { UserMessage } from '@/component/UserMessage.component.vue';\nimport LoadingComponent from '@/component/Loading.component.vue';\nimport EditIcon from '@/component/icon/PencilIcon.component.vue';\n\nimport { blogClient } from '@/api/client/blog/Blog.client';\nimport { markdownService } from '@/service/markdown/Markdown.service';\nimport { userService } from '@/service/user/User.service';\n\nimport { BlogPost } from '@/model/BlogPost.model';\nimport { UserType } from '@/model/User.model';\n\nexport default defineComponent({\n name: 'BlogPostView',\n\n components: {\n PageContentComponent,\n PageTitleComponent,\n PageActionsBarComponent,\n ButtonComponent,\n LinkComponent,\n UserMessageComponent,\n LoadingComponent,\n EditIcon,\n },\n\n setup() {\n const route = useRoute();\n\n const authDetails = userService.getAuthDetails();\n const isAdmin = computed(() => authDetails.value?.user.type === UserType.Admin);\n\n const urlSlug = route.params.urlSlug as string;\n\n const blogPost = ref(null);\n const isLoading = ref(false);\n\n const userMessage = ref(UserMessage.none());\n\n const displayPostedAt = computed(() => blogPost?.value?.postedAt.format('Do MMMM YYYY') ?? '');\n const displayPostedAtDifference = computed(() => blogPost?.value?.postedAt.fromNow() ?? '');\n\n const markdown = computed(() => {\n if (blogPost.value === null || blogPost.value.content === null)\n return '';\n\n return markdownService.parse(blogPost.value.content);\n });\n\n onMounted(async () => {\n isLoading.value = true;\n userMessage.value = UserMessage.none();\n\n const result = await blogClient.getBlogPostByUrlSlug(urlSlug);\n if (result instanceof Error) {\n isLoading.value = false;\n userMessage.value = UserMessage.error(result.message || 'Unable to load blog post, please try and refresh.');\n return;\n }\n\n blogPost.value = {\n reference: result.reference,\n title: result.title,\n urlSlug: result.urlSlug,\n postedAt: dayjs(result.postedAt),\n summary: result.summary,\n content: result.content,\n };\n\n isLoading.value = false;\n userMessage.value = UserMessage.none();\n });\n\n return {\n isAdmin,\n blogPost,\n userMessage,\n isLoading,\n displayPostedAt,\n displayPostedAtDifference,\n markdown,\n }\n },\n});\n","import { render } from \"./BlogPost.view.vue?vue&type=template&id=4a1728c5&ts=true\"\nimport script from \"./BlogPost.view.vue?vue&type=script&lang=ts\"\nexport * from \"./BlogPost.view.vue?vue&type=script&lang=ts\"\n\nimport \"./BlogPost.view.vue?vue&type=style&index=0&id=4a1728c5&lang=scss\"\n\nimport exportComponent from \"/home/wjbaker.com/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BlogPost.view.vue?vue&type=style&index=0&id=4a1728c5&lang=scss\"","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, vModelText as _vModelText, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { key: 0 }\nconst _hoisted_2 = { key: 1 }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"Title\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"Url Slug\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"Summary\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"Content \")\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"(markdown)\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_PageTitleComponent = _resolveComponent(\"PageTitleComponent\")!\n const _component_LoadingComponent = _resolveComponent(\"LoadingComponent\")!\n const _component_UserMessageComponent = _resolveComponent(\"UserMessageComponent\")!\n const _component_PageActionsBarComponent = _resolveComponent(\"PageActionsBarComponent\")!\n const _component_LinkComponent = _resolveComponent(\"LinkComponent\")!\n const _component_ButtonComponent = _resolveComponent(\"ButtonComponent\")!\n const _component_PageContentComponent = _resolveComponent(\"PageContentComponent\")!\n\n return (_openBlock(), _createBlock(_component_PageContentComponent, { class: \"blog-post-edit-view\" }, {\n default: _withCtx(() => [\n _createVNode(_component_PageTitleComponent, {\n title: _ctx.isNew ? 'New Blog Post' : 'Edit Blog Post',\n subheading: _ctx.blogPostReference\n }, null, 8, [\"title\", \"subheading\"]),\n (_ctx.isLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_LoadingComponent, { message: \"Loading Blog Post\" })\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_UserMessageComponent, { details: _ctx.loadUserMessage }, null, 8, [\"details\"]),\n (!_ctx.isLoading && !_ctx.loadUserMessage.isVisible)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_PageActionsBarComponent, {\n returnLink: _ctx.returnLink,\n returnText: _ctx.returnText\n }, null, 8, [\"returnLink\", \"returnText\"]),\n _createElementVNode(\"label\", null, [\n _hoisted_3,\n _withDirectives(_createElementVNode(\"input\", {\n type: \"text\",\n placeholder: \"My Blog Post\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.titleField) = $event))\n }, null, 512), [\n [_vModelText, _ctx.titleField]\n ])\n ]),\n _createElementVNode(\"label\", null, [\n _hoisted_4,\n _withDirectives(_createElementVNode(\"input\", {\n type: \"text\",\n placeholder: \"my-blog-post\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.urlSlugField) = $event))\n }, null, 512), [\n [_vModelText, _ctx.urlSlugField]\n ])\n ]),\n _createElementVNode(\"label\", null, [\n _hoisted_5,\n _withDirectives(_createElementVNode(\"textarea\", {\n rows: \"4\",\n placeholder: \"Brief description of what the blog post is\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.summaryField) = $event))\n }, null, 512), [\n [_vModelText, _ctx.summaryField]\n ])\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"strong\", null, [\n _hoisted_6,\n _createVNode(_component_LinkComponent, { href: \"https://www.markdownguide.org/basic-syntax/\" }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n })\n ]),\n _withDirectives(_createElementVNode(\"textarea\", {\n rows: \"60\",\n placeholder: \"Deeper dive into what the blog post is, why it exists and how it was created.\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.contentField) = $event))\n }, null, 512), [\n [_vModelText, _ctx.contentField]\n ])\n ]),\n _createElementVNode(\"label\", null, [\n _createVNode(_component_ButtonComponent, { onClick: _ctx.onUpdateBlogPost }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.isNew ? 'Create Blog Post' : 'Update Blog Post'), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ]),\n _createVNode(_component_UserMessageComponent, { details: _ctx.submitUserMessage }, null, 8, [\"details\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }))\n}","\nimport { computed, defineComponent, onMounted, ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport dayjs from 'dayjs';\n\nimport PageContentComponent from '@/component/layout/PageContent.component.vue';\nimport PageTitleComponent from '@/component/layout/PageTitle.component.vue';\nimport PageActionsBarComponent from '@/component/layout/PageActionsBar.component.vue';\nimport LoadingComponent from '@/component/Loading.component.vue';\nimport UserMessageComponent, { UserMessage } from '@/component/UserMessage.component.vue';\nimport ButtonComponent from '@/component/Button.component.vue';\nimport LinkComponent from '@/component/Link.component.vue';\n\nimport { blogClient } from '@/api/client/blog/Blog.client';\n\nimport { BlogPost } from '@/model/BlogPost.model';\n\nexport default defineComponent({\n name: 'BlogPostEditView',\n\n components: {\n PageContentComponent,\n PageTitleComponent,\n PageActionsBarComponent,\n LoadingComponent,\n UserMessageComponent,\n ButtonComponent,\n LinkComponent,\n },\n\n setup() {\n const route = useRoute();\n const router = useRouter();\n\n const blogPostReference = ref(route.params.reference?.toString() || null);\n\n const isNew = computed(() => blogPostReference.value === null);\n\n const blogPost = ref(null);\n const isLoading = ref(false);\n\n const loadUserMessage = ref(UserMessage.none());\n const submitUserMessage = ref(UserMessage.none());\n\n const titleField = ref('');\n const urlSlugField = ref('');\n const summaryField = ref('');\n const contentField = ref('');\n\n const returnText = computed(() => isNew.value ? 'Return to Blog' : 'Return to Blog Post');\n const returnLink = computed(() => isNew.value ? `/blog` : `/blog/post/${blogPost.value?.urlSlug}`);\n\n onMounted(async () => {\n if (blogPostReference.value === null)\n return;\n\n isLoading.value = true;\n loadUserMessage.value = UserMessage.none();\n\n const result = await blogClient.getBlogPostByReference(blogPostReference.value);\n if (result instanceof Error) {\n isLoading.value = false;\n loadUserMessage.value = UserMessage.error(result.message || 'Unable to load blog post; please try refreshing the page.');\n return;\n }\n\n blogPost.value = {\n reference: result.reference,\n title: result.title,\n urlSlug: result.urlSlug,\n postedAt: dayjs(result.postedAt),\n summary: result.summary,\n content: result.content,\n };\n\n titleField.value = blogPost.value.title;\n urlSlugField.value = blogPost.value.urlSlug;\n summaryField.value = blogPost.value.summary;\n contentField.value = blogPost.value.content ?? '';\n\n isLoading.value = false;\n loadUserMessage.value = UserMessage.none();\n });\n\n return {\n blogPostReference,\n isNew,\n isLoading,\n loadUserMessage,\n submitUserMessage,\n titleField,\n urlSlugField,\n summaryField,\n contentField,\n returnText,\n returnLink,\n\n async onUpdateBlogPost() {\n if (titleField.value.length < 3)\n return;\n if (summaryField.value.length < 3)\n return;\n if (contentField.value.length < 3)\n return;\n\n submitUserMessage.value = UserMessage.none();\n\n if (blogPost.value === null) {\n const result = await blogClient.createBlogPost({\n title: titleField.value,\n urlSlug: urlSlugField.value,\n summary: summaryField.value,\n content: contentField.value,\n });\n if (result instanceof Error) {\n submitUserMessage.value = UserMessage.error(result.message || 'Unable to create new blog post, please try refreshing the page and trying again.');\n return;\n }\n\n submitUserMessage.value = UserMessage.success('Successfully created new blog post.');\n\n router.push({\n path: `/blog/post/edit/${result.reference}`,\n });\n }\n else {\n const result = await blogClient.updateBlogPost(blogPost.value.reference, {\n title: titleField.value,\n urlSlug: urlSlugField.value,\n summary: summaryField.value,\n content: contentField.value,\n });\n if (result instanceof Error) {\n submitUserMessage.value = UserMessage.error(result.message || 'Unable to update blog post, please try refreshing the page and trying again.');\n return;\n }\n\n submitUserMessage.value = UserMessage.success('Successfully updated blog post.');\n\n router.push({\n path: `/blog/post/edit/${result.reference}`,\n });\n }\n },\n }\n },\n});\n","import { render } from \"./BlogPostEdit.view.vue?vue&type=template&id=da68faae&ts=true\"\nimport script from \"./BlogPostEdit.view.vue?vue&type=script&lang=ts\"\nexport * from \"./BlogPostEdit.view.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/wjbaker.com/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Blog.view.vue?vue&type=style&index=0&id=25c5b748&lang=scss\""],"sourceRoot":""}