Compare commits

..

2 Commits

Author SHA1 Message Date
amk-dev
f862b4aaae fix: fix actions not triggered when sidebar is not open 2023-12-19 15:17:03 +05:30
Andrew Bastin
7374a35b41 fix: broken ui due to accidentally moved postcss config 2023-12-19 12:40:07 +05:30
11 changed files with 111 additions and 113 deletions

View File

@@ -313,12 +313,10 @@
"export": { "export": {
"as_json": "Export as JSON", "as_json": "Export as JSON",
"create_secret_gist": "Create secret Gist", "create_secret_gist": "Create secret Gist",
"create_secret_gist_tooltip_text": "Export as secret Gist",
"failed": "Something went wrong while exporting", "failed": "Something went wrong while exporting",
"secret_gist_success": "Successfully exported as secret Gist", "gist_created": "Gist created",
"require_github": "Login with GitHub to create secret gist", "require_github": "Login with GitHub to create secret gist",
"title": "Export", "title": "Export"
"success": "Successfully exported"
}, },
"filter": { "filter": {
"all": "All", "all": "All",

View File

@@ -1,11 +1,11 @@
// generated by unplugin-vue-components /* eslint-disable */
// We suggest you to commit this file into source control /* prettier-ignore */
// @ts-nocheck
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399 // Read more: https://github.com/vuejs/core/pull/3399
import '@vue/runtime-core'
export {} export {}
declare module '@vue/runtime-core' { declare module 'vue' {
export interface GlobalComponents { export interface GlobalComponents {
AppActionHandler: typeof import('./components/app/ActionHandler.vue')['default'] AppActionHandler: typeof import('./components/app/ActionHandler.vue')['default']
AppBanner: typeof import('./components/app/Banner.vue')['default'] AppBanner: typeof import('./components/app/Banner.vue')['default']
@@ -210,5 +210,4 @@ declare module '@vue/runtime-core' {
WorkspaceCurrent: typeof import('./components/workspace/Current.vue')['default'] WorkspaceCurrent: typeof import('./components/workspace/Current.vue')['default']
WorkspaceSelector: typeof import('./components/workspace/Selector.vue')['default'] WorkspaceSelector: typeof import('./components/workspace/Selector.vue')['default']
} }
} }

View File

@@ -1,15 +1,16 @@
<template> <template>
<Splitpanes <Splitpanes
class="smart-splitter"
:rtl="SIDEBAR_ON_LEFT && mdAndLarger" :rtl="SIDEBAR_ON_LEFT && mdAndLarger"
:class="{ :class="{
'!flex-row-reverse': SIDEBAR_ON_LEFT && mdAndLarger, '!flex-row-reverse': SIDEBAR_ON_LEFT && mdAndLarger,
'smart-splitter': SIDEBAR && hasSidebar,
'no-splitter': !(SIDEBAR && hasSidebar),
}" }"
:horizontal="!mdAndLarger" :horizontal="!mdAndLarger"
@resize="setPaneEvent($event, 'vertical')" @resize="setPaneEvent($event, 'vertical')"
> >
<Pane <Pane
:size="PANE_MAIN_SIZE" :size="SIDEBAR && hasSidebar ? PANE_MAIN_SIZE : 100"
min-size="65" min-size="65"
class="flex flex-col !overflow-auto" class="flex flex-col !overflow-auto"
> >
@@ -36,9 +37,8 @@
</Splitpanes> </Splitpanes>
</Pane> </Pane>
<Pane <Pane
v-if="SIDEBAR && hasSidebar" :size="SIDEBAR && hasSidebar ? PANE_SIDEBAR_SIZE : 0"
:size="PANE_SIDEBAR_SIZE" :min-size="25"
min-size="25"
class="flex flex-col !overflow-auto bg-primaryContrast" class="flex flex-col !overflow-auto bg-primaryContrast"
> >
<slot name="sidebar" /> <slot name="sidebar" />

View File

@@ -9,10 +9,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { HoppCollection } from "@hoppscotch/data"
import * as E from "fp-ts/Either" import * as E from "fp-ts/Either"
import { PropType, computed, ref } from "vue"
import { FileSource } from "~/helpers/import-export/import/import-sources/FileSource" import { FileSource } from "~/helpers/import-export/import/import-sources/FileSource"
import { UrlSource } from "~/helpers/import-export/import/import-sources/UrlSource" import { UrlSource } from "~/helpers/import-export/import/import-sources/UrlSource"
@@ -27,9 +24,11 @@ import {
} from "~/helpers/import-export/import/importers" } from "~/helpers/import-export/import/importers"
import { defineStep } from "~/composables/step-components" import { defineStep } from "~/composables/step-components"
import { PropType, computed, ref } from "vue"
import { useI18n } from "~/composables/i18n" import { useI18n } from "~/composables/i18n"
import { useToast } from "~/composables/toast" import { useToast } from "~/composables/toast"
import { HoppCollection } from "@hoppscotch/data"
import { appendRESTCollections, restCollections$ } from "~/newstore/collections" import { appendRESTCollections, restCollections$ } from "~/newstore/collections"
import MyCollectionImport from "~/components/importExport/ImportExportSteps/MyCollectionImport.vue" import MyCollectionImport from "~/components/importExport/ImportExportSteps/MyCollectionImport.vue"
import { GetMyTeamsQuery } from "~/helpers/backend/graphql" import { GetMyTeamsQuery } from "~/helpers/backend/graphql"
@@ -49,7 +48,7 @@ import { getTeamCollectionJSON } from "~/helpers/backend/helpers"
import { platform } from "~/platform" import { platform } from "~/platform"
import { initializeDownloadCollection } from "~/helpers/import-export/export" import { initializeDownloadCollection } from "~/helpers/import-export/export"
import { gistExporter } from "~/helpers/import-export/export/gist" import { collectionsGistExporter } from "~/helpers/import-export/export/gistExport"
import { myCollectionsExporter } from "~/helpers/import-export/export/myCollections" import { myCollectionsExporter } from "~/helpers/import-export/export/myCollections"
import { teamCollectionsExporter } from "~/helpers/import-export/export/teamCollections" import { teamCollectionsExporter } from "~/helpers/import-export/export/teamCollections"
@@ -84,8 +83,6 @@ const currentUser = useReadonlyStream(
platform.auth.getCurrentUser() platform.auth.getCurrentUser()
) )
const myCollections = useReadonlyStream(restCollections$, [])
const showImportFailedError = () => { const showImportFailedError = () => {
toast.error(t("import.failed")) toast.error(t("import.failed"))
} }
@@ -471,13 +468,8 @@ const HoppGistCollectionsExporter: ImporterOrExporter = {
icon: IconGithub, icon: IconGithub,
disabled: !currentUser.value disabled: !currentUser.value
? true ? true
: currentUser.value?.provider !== "github.com", : currentUser.value.provider !== "github.com",
title: title: t("export.create_secret_gist"),
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
currentUser?.value?.provider === "github.com"
? "export.create_secret_gist_tooltip_text"
: "export.require_github",
applicableTo: ["personal-workspace", "team-workspace"], applicableTo: ["personal-workspace", "team-workspace"],
isLoading: isHoppGistCollectionExporterInProgress, isLoading: isHoppGistCollectionExporterInProgress,
}, },
@@ -494,27 +486,13 @@ const HoppGistCollectionsExporter: ImporterOrExporter = {
} }
if (E.isRight(collectionJSON)) { if (E.isRight(collectionJSON)) {
if (!JSON.parse(collectionJSON.right).length) { collectionsGistExporter(collectionJSON.right, accessToken)
isHoppGistCollectionExporterInProgress.value = false
return toast.error(t("error.no_collections_to_export"))
}
const res = await gistExporter(collectionJSON.right, accessToken)
if (E.isLeft(res)) {
toast.error(t("export.failed"))
return
}
toast.success(t("export.secret_gist_success"))
platform.analytics?.logEvent({ platform.analytics?.logEvent({
type: "HOPP_EXPORT_COLLECTION", type: "HOPP_EXPORT_COLLECTION",
exporter: "gist", exporter: "gist",
platform: "rest", platform: "rest",
}) })
platform.io.openExternalLink(res.right)
} }
isHoppGistCollectionExporterInProgress.value = false isHoppGistCollectionExporterInProgress.value = false
@@ -582,6 +560,8 @@ const selectedTeamID = computed(() => {
: undefined : undefined
}) })
const myCollections = useReadonlyStream(restCollections$, [])
const getCollectionJSON = async () => { const getCollectionJSON = async () => {
if ( if (
props.collectionsType.type === "team-collections" && props.collectionsType.type === "team-collections" &&

View File

@@ -9,16 +9,15 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { HoppCollection } from "@hoppscotch/data"
import * as E from "fp-ts/Either"
import { ref } from "vue"
import { useI18n } from "~/composables/i18n" import { useI18n } from "~/composables/i18n"
import { useToast } from "~/composables/toast" import { useToast } from "~/composables/toast"
import { HoppCollection } from "@hoppscotch/data"
import { ImporterOrExporter } from "~/components/importExport/types" import { ImporterOrExporter } from "~/components/importExport/types"
import { FileSource } from "~/helpers/import-export/import/import-sources/FileSource" import { FileSource } from "~/helpers/import-export/import/import-sources/FileSource"
import { GistSource } from "~/helpers/import-export/import/import-sources/GistSource" import { GistSource } from "~/helpers/import-export/import/import-sources/GistSource"
import * as E from "fp-ts/Either"
import IconFolderPlus from "~icons/lucide/folder-plus" import IconFolderPlus from "~icons/lucide/folder-plus"
import IconUser from "~icons/lucide/user" import IconUser from "~icons/lucide/user"
import { initializeDownloadCollection } from "~/helpers/import-export/export" import { initializeDownloadCollection } from "~/helpers/import-export/export"
@@ -31,7 +30,7 @@ import {
} from "~/newstore/collections" } from "~/newstore/collections"
import { hoppGqlCollectionsImporter } from "~/helpers/import-export/import/hoppGql" import { hoppGqlCollectionsImporter } from "~/helpers/import-export/import/hoppGql"
import { gqlCollectionsExporter } from "~/helpers/import-export/export/gqlCollections" import { gqlCollectionsExporter } from "~/helpers/import-export/export/gqlCollections"
import { gistExporter } from "~/helpers/import-export/export/gist" import { gqlCollectionsGistExporter } from "~/helpers/import-export/export/gqlCollectionsGistExporter"
import { computed } from "vue" import { computed } from "vue"
import { hoppGQLImporter } from "~/helpers/import-export/import/hopp" import { hoppGQLImporter } from "~/helpers/import-export/import/hopp"
@@ -43,10 +42,6 @@ const currentUser = useReadonlyStream(
platform.auth.getCurrentUser() platform.auth.getCurrentUser()
) )
const gqlCollections = useReadonlyStream(graphqlCollections$, [])
const isGqlCollectionGistExportInProgress = ref(false)
const GqlCollectionsHoppImporter: ImporterOrExporter = { const GqlCollectionsHoppImporter: ImporterOrExporter = {
metadata: { metadata: {
id: "import.from_json", id: "import.from_json",
@@ -124,6 +119,8 @@ const GqlCollectionsGistImporter: ImporterOrExporter = {
}), }),
} }
const gqlCollections = useReadonlyStream(graphqlCollections$, [])
const GqlCollectionsHoppExporter: ImporterOrExporter = { const GqlCollectionsHoppExporter: ImporterOrExporter = {
metadata: { metadata: {
id: "export.as_json", id: "export.as_json",
@@ -162,35 +159,29 @@ const GqlCollectionsGistExporter: ImporterOrExporter = {
metadata: { metadata: {
id: "export.as_gist", id: "export.as_gist",
name: "export.create_secret_gist", name: "export.create_secret_gist",
title: title: !currentUser
// eslint-disable-next-line @typescript-eslint/ban-ts-comment ? "export.require_github"
// @ts-ignore : // eslint-disable-next-line @typescript-eslint/ban-ts-comment
currentUser?.value?.provider === "github.com" // @ts-ignore
? "export.create_secret_gist_tooltip_text" currentUser.provider !== "github.com"
: "export.require_github", ? `export.require_github`
: "export.create_secret_gist",
icon: IconUser, icon: IconUser,
disabled: !currentUser.value disabled: !currentUser.value
? true ? true
: currentUser.value?.provider !== "github.com", : currentUser.value.provider !== "github.com",
applicableTo: ["personal-workspace"], applicableTo: ["personal-workspace"],
isLoading: isGqlCollectionGistExportInProgress,
}, },
action: async () => { action: async () => {
if (!gqlCollections.value.length) {
return toast.error(t("error.no_collections_to_export"))
}
if (!currentUser.value) { if (!currentUser.value) {
toast.error(t("profile.no_permission")) toast.error(t("profile.no_permission"))
return return
} }
isGqlCollectionGistExportInProgress.value = true
const accessToken = currentUser.value?.accessToken const accessToken = currentUser.value?.accessToken
if (accessToken) { if (accessToken) {
const res = await gistExporter( const res = await gqlCollectionsGistExporter(
JSON.stringify(gqlCollections.value), JSON.stringify(gqlCollections.value),
accessToken accessToken
) )
@@ -200,7 +191,7 @@ const GqlCollectionsGistExporter: ImporterOrExporter = {
return return
} }
toast.success(t("export.secret_gist_success")) toast.success(t("export.success"))
platform.analytics?.logEvent({ platform.analytics?.logEvent({
type: "HOPP_EXPORT_COLLECTION", type: "HOPP_EXPORT_COLLECTION",
@@ -210,8 +201,6 @@ const GqlCollectionsGistExporter: ImporterOrExporter = {
platform.io.openExternalLink(res.right) platform.io.openExternalLink(res.right)
} }
isGqlCollectionGistExportInProgress.value = false
}, },
} }

View File

@@ -9,17 +9,15 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { Environment } from "@hoppscotch/data"
import * as E from "fp-ts/Either"
import { ref } from "vue"
import { useI18n } from "~/composables/i18n" import { useI18n } from "~/composables/i18n"
import { useToast } from "~/composables/toast" import { useToast } from "~/composables/toast"
import { Environment } from "@hoppscotch/data"
import { ImporterOrExporter } from "~/components/importExport/types" import { ImporterOrExporter } from "~/components/importExport/types"
import { FileSource } from "~/helpers/import-export/import/import-sources/FileSource" import { FileSource } from "~/helpers/import-export/import/import-sources/FileSource"
import { GistSource } from "~/helpers/import-export/import/import-sources/GistSource" import { GistSource } from "~/helpers/import-export/import/import-sources/GistSource"
import { hoppEnvImporter } from "~/helpers/import-export/import/hoppEnv" import { hoppEnvImporter } from "~/helpers/import-export/import/hoppEnv"
import * as E from "fp-ts/Either"
import { import {
appendEnvironments, appendEnvironments,
addGlobalEnvVariable, addGlobalEnvVariable,
@@ -41,7 +39,7 @@ import { initializeDownloadCollection } from "~/helpers/import-export/export"
import { computed } from "vue" import { computed } from "vue"
import { useReadonlyStream } from "~/composables/stream" import { useReadonlyStream } from "~/composables/stream"
import { environmentsExporter } from "~/helpers/import-export/export/environments" import { environmentsExporter } from "~/helpers/import-export/export/environments"
import { gistExporter } from "~/helpers/import-export/export/gist" import { environmentsGistExporter } from "~/helpers/import-export/export/environmentsGistExport"
import { platform } from "~/platform" import { platform } from "~/platform"
const t = useI18n() const t = useI18n()
@@ -60,8 +58,6 @@ const currentUser = useReadonlyStream(
platform.auth.getCurrentUser() platform.auth.getCurrentUser()
) )
const isEnvironmentGistExportInProgress = ref(false)
const isTeamEnvironment = computed(() => { const isTeamEnvironment = computed(() => {
return props.environmentType === "TEAM_ENV" return props.environmentType === "TEAM_ENV"
}) })
@@ -266,44 +262,35 @@ const HoppEnvironmentsGistExporter: ImporterOrExporter = {
title: title:
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
currentUser?.value?.provider === "github.com" currentUser?.provider === "github.com"
? "export.create_secret_gist_tooltip_text" ? "export.create_secret_gist"
: "export.require_github", : "export.require_github",
icon: IconUser, icon: IconUser,
disabled: !currentUser.value disabled: !currentUser.value
? true ? true
: currentUser.value?.provider !== "github.com", : currentUser.value.provider !== "github.com",
applicableTo: ["personal-workspace", "team-workspace"], applicableTo: ["personal-workspace", "team-workspace"],
isLoading: isEnvironmentGistExportInProgress,
}, },
action: async () => { action: async () => {
if (!environmentJson.value.length) {
return toast.error(t("error.no_environments_to_export"))
}
if (!currentUser.value) { if (!currentUser.value) {
toast.error(t("profile.no_permission")) toast.error(t("profile.no_permission"))
return return
} }
isEnvironmentGistExportInProgress.value = true
const accessToken = currentUser.value?.accessToken const accessToken = currentUser.value?.accessToken
if (accessToken) { if (accessToken) {
const res = await gistExporter( const res = await environmentsGistExporter(
JSON.stringify(environmentJson.value), JSON.stringify(environmentJson.value),
accessToken, accessToken
"hoppscotch-environment.json"
) )
if (E.isLeft(res)) { if (E.isLeft(res)) {
toast.error(t("export.failed")) toast.error(t("export.failed"))
isEnvironmentGistExportInProgress.value = false
return return
} }
toast.success(t("export.secret_gist_success")) toast.success(t("export.success"))
platform.analytics?.logEvent({ platform.analytics?.logEvent({
type: "HOPP_EXPORT_ENVIRONMENT", type: "HOPP_EXPORT_ENVIRONMENT",
@@ -312,8 +299,6 @@ const HoppEnvironmentsGistExporter: ImporterOrExporter = {
platform.io.openExternalLink(res.right) platform.io.openExternalLink(res.right)
} }
isEnvironmentGistExportInProgress.value = false
}, },
} }

View File

@@ -0,0 +1,18 @@
import * as E from "fp-ts/Either"
import { createGist } from "~/helpers/gist"
export const environmentsGistExporter = async (
environmentsJSON: string,
accessToken: string
) => {
const res = await createGist(
environmentsJSON,
"hoppscotch-collections.json",
accessToken
)()
if (E.isLeft(res)) {
return E.left(res.left)
}
return E.right(res.right.data.html_url as string)
}

View File

@@ -1,19 +0,0 @@
import * as E from "fp-ts/Either"
import { createGist } from "~/helpers/gist"
export const gistExporter = async (
JSONFileContents: string,
accessToken: string,
fileName = "hoppscotch-collections.json"
) => {
if (!accessToken) {
return E.left("Invalid User")
}
const res = await createGist(JSONFileContents, fileName, accessToken)()
if (E.isLeft(res)) {
return E.left(res.left)
}
return E.right(res.right.data.html_url as string)
}

View File

@@ -0,0 +1,22 @@
import { createGist } from "~/helpers/gist"
import * as E from "fp-ts/Either"
export const collectionsGistExporter = async (
collectionJSON: string,
accessToken: string
) => {
if (!accessToken) {
return E.left("Invalid User")
}
const res = await createGist(
collectionJSON,
"hoppscotch-collections.json",
accessToken
)()
if (E.isLeft(res)) {
return E.left(res.left)
}
return E.right(true)
}

View File

@@ -0,0 +1,18 @@
import * as E from "fp-ts/Either"
import { createGist } from "~/helpers/gist"
export const gqlCollectionsGistExporter = async (
gqlCollectionsJSON: string,
accessToken: string
) => {
const res = await createGist(
gqlCollectionsJSON,
"hoppscotch-collections.json",
accessToken
)()
if (E.isLeft(res)) {
return E.left(res.left)
}
return E.right(res.right.data.html_url as string)
}

View File

@@ -0,0 +1,8 @@
const config = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
module.exports = config