diff --git a/ProcessMaker/Http/Controllers/Api/DevLinkController.php b/ProcessMaker/Http/Controllers/Api/DevLinkController.php index eeb19cd24d..f4f24a7016 100644 --- a/ProcessMaker/Http/Controllers/Api/DevLinkController.php +++ b/ProcessMaker/Http/Controllers/Api/DevLinkController.php @@ -55,13 +55,17 @@ public function show(DevLink $devLink) public function store(Request $request) { $request->validate([ - 'name' => ['required', 'unique:dev_links,name'], - 'url' => ['required', 'url', 'unique:dev_links,url'], + 'name' => ['required'], + 'url' => ['required', 'url'], ]); - - $devLink = new DevLink(); - $devLink->name = $request->input('name'); - $devLink->url = $request->input('url'); + $devLink = DevLink::where('name', $request->input('name'))->first(); + if ($devLink) { + $devLink->url = $request->input('url'); + } else { + $devLink = new DevLink(); + $devLink->name = $request->input('name'); + $devLink->url = $request->input('url'); + } $devLink->saveOrFail(); return $devLink; @@ -82,7 +86,11 @@ public function destroy(DevLink $devLink) public function ping(DevLink $devLink) { - return $devLink->client()->get(route('api.devlink.pong', [], false)); + try { + return$devLink->client()->get(route('api.devlink.pong', [], false)); + } catch (\Exception $e) { + return response()->json(['error' => 'DevLink connection error'], $e->getCode()); + } } public function pong() diff --git a/resources/js/admin/devlink/components/BundleSettingsModal.vue b/resources/js/admin/devlink/components/BundleSettingsModal.vue index f4ac2d3feb..45efb15d22 100644 --- a/resources/js/admin/devlink/components/BundleSettingsModal.vue +++ b/resources/js/admin/devlink/components/BundleSettingsModal.vue @@ -38,7 +38,7 @@ + + diff --git a/resources/js/admin/devlink/components/Index.vue b/resources/js/admin/devlink/components/Index.vue index cece610b16..3f5e0e962f 100644 --- a/resources/js/admin/devlink/components/Index.vue +++ b/resources/js/admin/devlink/components/Index.vue @@ -5,6 +5,7 @@ import debounce from 'lodash/debounce'; import Status from './Status.vue'; import EllipsisMenu from '../../../components/shared/EllipsisMenu.vue'; import DeleteModal from './DeleteModal.vue'; +import CreateDevLinkModal from './CreateDevLinkModal.vue'; import { store } from '../common'; const vue = getCurrentInstance().proxy; @@ -13,6 +14,7 @@ const route = useRoute(); const devlinks = ref([]); const editModal = ref(null); const deleteModal = ref(null); +const createDevLinkModal = ref(null); const deleteWarningTitle = ref(vue.$t("Delete Confirmation")); const filter = ref(""); const actions = [ @@ -53,6 +55,7 @@ onMounted(() => { const newName = ref(''); const newUrl = ref(''); +const status = ref(''); const load = () => { ProcessMaker.apiClient @@ -78,16 +81,12 @@ const clear = () => { newUrl.value = ''; } -const create = (e) => { - if (!urlIsValid.value) { - e.preventDefault(); - return; - } - +const create = (name, url) => { + status.value = ''; ProcessMaker.apiClient .post('/devlink', { - name: newName.value, - url: newUrl.value + name: name, + url: url }) .then((result) => { const newUrl = result.data.url; @@ -97,7 +96,22 @@ const create = (e) => { devlink_id: newId, redirect_uri: redirectUri, }; - window.location.href = `${newUrl}/admin/devlink/oauth-client?${new URLSearchParams(params).toString()}`; + const fullUrl = `${newUrl}/admin/devlink/oauth-client?${new URLSearchParams(params).toString()}`; + + ProcessMaker.apiClient + .get(`devlink/${newId}/ping`) + .then((response) => { + status.value = 'success'; + window.location.href = fullUrl; + }) + .catch((e) => { + if (e.response.status === 401) { + status.value = 'success'; + window.location.href = fullUrl; + } else { + status.value = 'error'; + } + }); }); }; @@ -146,6 +160,15 @@ const handleFilterChange = () => { debouncedLoad(); }; +const showCreateModal = () => { + status.value = ''; + createDevLinkModal.value.show(); +}; + +const handleNewUrlUpdate = (newValue) => { + newUrl.value = newValue; +}; + const urlIsValid = computed(() => { return /^(https?:\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(:\d{1,5})?$/.test(newUrl.value); }); @@ -161,7 +184,7 @@ const urlIsValid = computed(() => {
{{ $t('Add Instance') }} @@ -169,7 +192,7 @@ const urlIsValid = computed(() => {
- { > - + --> +