diff --git a/components/filters/SearchValueMarketplaceFilter.vue b/components/filters/SearchValueMarketplaceFilter.vue index b65c3e8..f2b75f9 100644 --- a/components/filters/SearchValueMarketplaceFilter.vue +++ b/components/filters/SearchValueMarketplaceFilter.vue @@ -8,12 +8,22 @@ :label="$t('searchValue')" /> - +
+
+ +
+ +
() +const isEbay = ref(false) const resolvedMarketplaceOptions = ref(detectLocationNA() ? usMarketplaces : marketplaces) const selectedMarketplaces = ref([]) +watch(isEbay, (newVal) => { + if (newVal) { + model.value!.marketplace = 'Ebay' + } +}) + watch(() => model.value!.marketplace, () => { + if (model.value?.marketplace == 'Ebay') { + isEbay.value = true + return + } + selectedMarketplaces.value = [] model.value?.marketplace.split(',').map((condidtionName) => { const item = resolvedMarketplaceOptions.value.find(m => m.value == condidtionName) diff --git a/components/ui/Checkbox.vue b/components/ui/Checkbox.vue index 37bba63..18de6c3 100644 --- a/components/ui/Checkbox.vue +++ b/components/ui/Checkbox.vue @@ -13,7 +13,7 @@ > diff --git a/components/ui/MultiSelect.vue b/components/ui/MultiSelect.vue index 07fc474..b951595 100644 --- a/components/ui/MultiSelect.vue +++ b/components/ui/MultiSelect.vue @@ -21,10 +21,12 @@ {{ selectedLabels }} @@ -87,6 +89,7 @@ const props = defineProps<{ label?: string hoverText?: string labelAria?: string + disabled?: boolean }>() const emit = defineEmits<{ @@ -102,7 +105,7 @@ watch(() => model, () => { // create the string that is displayed on the button eq. Ebay, AutoScout24 const selectedLabels = computed(() => { - if (selectedItems.value.length === 0) return '' + if (selectedItems.value.length === 0) return t('selectOption') const rawSelectedItems = selectedItems.value.map(item => toRaw(item)) // Convert Proxies to raw objects const selected = props.options .filter(option => rawSelectedItems.some(selectedItem => diff --git a/constants/CreateFilterConstants.ts b/constants/CreateFilterConstants.ts index e2cb761..9acbad9 100644 --- a/constants/CreateFilterConstants.ts +++ b/constants/CreateFilterConstants.ts @@ -6,7 +6,6 @@ export interface Options { export const marketplaces: Options[] = [ { value: 'all', label: 'allMarket' }, - { value: 'Ebay', label: 'Ebay' }, { value: 'Kleinanzeigen', label: 'Kleinanzeigen' }, { value: 'AutoScout24', label: 'autoScoutMarketplace' }, { value: 'Facebook', label: 'facebookMarketplace', premium: true }, @@ -16,7 +15,6 @@ export const marketplaces: Options[] = [ export const usMarketplaces: Options[] = [ { value: 'all', label: 'allMarket' }, - { value: 'Ebay', label: 'Ebay' }, { value: 'Facebook', label: 'facebookMarketplace', premium: true }, { value: 'Craigslist', label: 'craigslistMarketplace' }, ] diff --git a/locales/de.json b/locales/de.json index ee96ad3..80320f4 100644 --- a/locales/de.json +++ b/locales/de.json @@ -670,5 +670,7 @@ "lowFuzzy": "Niedrige Toleranz", "mediumFuzzy": "Mittlere Toleranz", "fuzzyInfo": "Anzahl der Buchstaben, die sich von deinem Suchwert unterscheiden dürfen: (z.B. Auto -> Auot, entspricht Niedriger Toleranz) \n Vorsicht! Suchwerte mit Toleranz können andere Produkte mit einschließen. Diese Einstellung ist wegen des Rechenaufwands nur für zahlende Nutzer verfügbar.", - "hasBasicPlanRestriction": "Das kostenlose Abo ist auf eine Suche alle 6 Stunden beschränkt" + "hasBasicPlanRestriction": "Das kostenlose Abo ist auf eine Suche alle 6 Stunden beschränkt", + "useEbayMarketplace": "Ebay verwenden", + "selectOption": "Option auswählen" } diff --git a/locales/en.json b/locales/en.json index 4fc84ad..0467563 100644 --- a/locales/en.json +++ b/locales/en.json @@ -670,5 +670,7 @@ "singleLetterChanged": "Single Letter added/removed", "lowFuzzy": "Light Fuzziness", "mediumFuzzy": "Medium Fuzziness", - "fuzzyInfo": "Amount of letters that can be different from your search value: ( Switch -> Swtich ) \n NOTE: changing this value can cause your search to match other products. This setting is restricted to paid tiers" + "fuzzyInfo": "Amount of letters that can be different from your search value: ( Switch -> Swtich ) \n NOTE: changing this value can cause your search to match other products. This setting is restricted to paid tiers", + "useEbayMarketplace": "Use Ebay", + "selectOption": "Select an option" } diff --git a/pages/filters/create.vue b/pages/filters/create.vue index 07684c3..8b62418 100755 --- a/pages/filters/create.vue +++ b/pages/filters/create.vue @@ -202,7 +202,6 @@ async function loadEditParam() { } case 'IncludePlatforms': { // construct the selected marketplaces from the string to test if it is all marketplaces selected - console.log(item.value) const constuctedArray = constructOptionsFromString(item.value ?? '') if (valididateAllMarketplace(constuctedArray)) { filter.value.marketplace = 'all' diff --git a/src/api-client/sdk.gen.ts b/src/api-client/sdk.gen.ts index bbfb4d8..855f541 100644 --- a/src/api-client/sdk.gen.ts +++ b/src/api-client/sdk.gen.ts @@ -1,7 +1,7 @@ // This file is auto-generated by @hey-api/openapi-ts import type { Options as ClientOptions, Composable, TDataShape, Client } from '@hey-api/client-nuxt'; -import type { LoginFirebaseData, LoginFirebaseResponse, LoginFirebaseError, GetFiltersData, GetFiltersResponse, GetFiltersError, GetOptionsData, GetOptionsResponse, GetOptionsError, ReportMatchData, ReportMatchResponse, ReportMatchError, AddFilterData, AddFilterResponse, AddFilterError, DeleteFilterData, DeleteFilterError, DeleteFilterWithTokenData, DeleteFilterWithTokenError, GetFilterByTokenData, GetFilterByTokenResponse, GetFilterByTokenError, TestFilterData, TestFilterResponse, TestFilterError, GetLocationData, GetLocationResponse, GetLocationError, GetCountryData, GetCountryResponse, GetCountryError, GetMatchesData, GetMatchesResponse, GetMatchesError, GetStatsData, GetStatsResponse, GetStatsError, GetListingData, GetListingResponse, GetListingError, GetSubscriptionData, GetSubscriptionResponse, GetSubscriptionError, SubscribeData, SubscribeResponse, SubscribeError, CancelSubscriptionData, CancelSubscriptionResponse, CancelSubscriptionError, DoRedirectData, DoRedirectError, GetInfoData, GetInfoResponse, GetInfoError, CreateLinkData, CreateLinkResponse, CreateLinkError, ListLinksData, ListLinksResponse, ListLinksError, GetLinkData, GetLinkResponse, GetLinkError, UseLinkData, UseLinkError, GetMeData, GetMeResponse, GetMeError, UpdateMeData, UpdateMeResponse, UpdateMeError } from './types.gen'; +import type { LoginFirebaseData, LoginFirebaseResponse, LoginFirebaseError, GetFiltersData, GetFiltersResponse, GetFiltersError, GetOptionsData, GetOptionsResponse, GetOptionsError, ReportMatchData, ReportMatchResponse, ReportMatchError, AddFilterData, AddFilterResponse, AddFilterError, DeleteFilterData, DeleteFilterError, DeleteFilterWithTokenData, DeleteFilterWithTokenError, GetFilterByTokenData, GetFilterByTokenResponse, GetFilterByTokenError, TestFilterData, TestFilterResponse, TestFilterError, GetLocationData, GetLocationResponse, GetLocationError, GetCountryData, GetCountryResponse, GetCountryError, GetFlipsData, GetFlipsResponse, GetFlipsError, GetMatchesData, GetMatchesResponse, GetMatchesError, GetStatsData, GetStatsResponse, GetStatsError, GetListingData, GetListingResponse, GetListingError, GetSubscriptionData, GetSubscriptionResponse, GetSubscriptionError, SubscribeData, SubscribeResponse, SubscribeError, CancelSubscriptionData, CancelSubscriptionResponse, CancelSubscriptionError, DoRedirectData, DoRedirectError, GetInfoData, GetInfoResponse, GetInfoError, CreateLinkData, CreateLinkResponse, CreateLinkError, ListLinksData, ListLinksResponse, ListLinksError, GetLinkData, GetLinkResponse, GetLinkError, UseLinkData, UseLinkError, GetMeData, GetMeResponse, GetMeError, UpdateMeData, UpdateMeResponse, UpdateMeError } from './types.gen'; import { client as _heyApiClient } from './client.gen'; export type Options = ClientOptions & { @@ -180,6 +180,19 @@ export const getCountry = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + name: 'Authorization', + type: 'apiKey' + } + ], + url: '/api/flips/{category}', + ...options + }); +}; + export const getMatches = (options: Options) => { return (options.client ?? _heyApiClient).get({ security: [ diff --git a/src/api-client/types.gen.ts b/src/api-client/types.gen.ts index ac0da7c..ab3b9b0 100644 --- a/src/api-client/types.gen.ts +++ b/src/api-client/types.gen.ts @@ -35,6 +35,17 @@ export type FilterOptions = { export type FilterType = 'Options' | 'NumberRange' | 'Text' | 'Date' | 'Radius' | 'Bool' | 'MultiSelect'; +export type Flip = { + category?: string | null; + listing?: Listing; + serializedListing?: string | null; + medianPrice?: number | null; + potentialProfit?: number | null; + serializedSells?: string | null; + foundAt?: string | null; + recentSells?: Array | null; +}; + export type InviteLink = { userId?: string; id?: string; @@ -125,6 +136,14 @@ export type ResultReport = { export type SearchState = 'None' | 'Disabled' | 'DisabledError'; +export type SoldFor = { + platform?: Platform; + key?: string | null; + price?: number | null; + date?: string | null; + id?: string | null; +}; + export type StoredListing = { platform?: Platform; priceKind?: PriceKind; @@ -752,6 +771,61 @@ export type GetCountryResponses = { export type GetCountryResponse = GetCountryResponses[keyof GetCountryResponses]; +export type GetFlipsData = { + body?: never; + path: { + category: string; + }; + query?: { + limit?: number; + }; + url: '/api/flips/{category}'; +}; + +export type GetFlipsErrors = { + /** + * Bad Request + */ + 400: { + /** + * Human readable id for this kind of error + */ + slug?: string; + /** + * More info about the error, may sometimes be sufficient to display to user + */ + message?: string; + }; + /** + * Internal Server Error + */ + 500: { + /** + * Human readable id for this kind of error + */ + slug?: string; + /** + * Unknown error occured + */ + message?: string; + /** + * Id for the error report with this id + */ + trace?: string; + }; +}; + +export type GetFlipsError = GetFlipsErrors[keyof GetFlipsErrors]; + +export type GetFlipsResponses = { + /** + * OK + */ + 200: Array; +}; + +export type GetFlipsResponse = GetFlipsResponses[keyof GetFlipsResponses]; + export type GetMatchesData = { body?: never; path?: never;