Skip to content

Add SwatchesOption to FetchedProduct and UpdatedProduct #481

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 25, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,7 @@ private fun createProductOptionsPolymorphicType(): PolymorphicType<ProductOption
"select" to ProductOption.SelectOption::class.java,
"size" to ProductOption.SizeOption::class.java,
"radio" to ProductOption.RadioOption::class.java,
"swatches" to ProductOption.SwatchesOption::class.java,
"checkbox" to ProductOption.CheckboxOption::class.java,
"textfield" to ProductOption.TextFieldOption::class.java,
"textarea" to ProductOption.TextAreaOption::class.java,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ fun FetchedProduct.ProductOption.toUpdated() = when (this) {
is FetchedProduct.ProductOption.SelectOption -> toUpdated()
is FetchedProduct.ProductOption.SizeOption -> toUpdated()
is FetchedProduct.ProductOption.RadioOption -> toUpdated()
is FetchedProduct.ProductOption.SwatchesOption -> toUpdated()
is FetchedProduct.ProductOption.CheckboxOption -> toUpdated()
is FetchedProduct.ProductOption.TextFieldOption -> toUpdated()
is FetchedProduct.ProductOption.TextAreaOption -> toUpdated()
Expand Down Expand Up @@ -139,6 +140,15 @@ fun FetchedProduct.ProductOption.RadioOption.toUpdated() = UpdatedProduct.Produc
required = required
)

fun FetchedProduct.ProductOption.SwatchesOption.toUpdated() = UpdatedProduct.ProductOption.SwatchesOption(
name = name,
nameTranslated = nameTranslated,
choices = choices.map { it.toUpdated() },
defaultChoice = defaultChoice,
required = required,
useImageAsSwatchSelector = useImageAsSwatchSelector,
)

fun FetchedProduct.ProductOption.CheckboxOption.toUpdated() = UpdatedProduct.ProductOption.CheckboxOption(
name = name,
nameTranslated = nameTranslated,
Expand Down Expand Up @@ -175,7 +185,9 @@ fun FetchedProduct.ProductOptionChoice.toUpdated() = UpdatedProduct.ProductOptio
text = text,
textTranslated = textTranslated,
priceModifier = priceModifier,
priceModifierType = priceModifierType
priceModifierType = priceModifierType,
hexCodes = hexCodes,
imageId = imageId,
)

fun FetchedProduct.ShippingSettings.toUpdated() = UpdatedProduct.ShippingSettings(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ enum class ProductOptionType {
TEXTAREA,
DATE,
FILES,
SIZE
SIZE,
SWATCHES,
}
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,16 @@ data class UpdatedProduct(
override val required: Boolean? = null
) : ProductOption(ProductOptionType.RADIO), ChoiceBased


data class SwatchesOption(
override val name: String = "",
override val nameTranslated: LocalizedValueMap? = null,
override val choices: List<ProductOptionChoice> = listOf(),
override val defaultChoice: Int? = null,
override val required: Boolean? = null,
val useImageAsSwatchSelector: Boolean = false,
) : ProductOption(ProductOptionType.SWATCHES), ChoiceBased

data class CheckboxOption(
override val name: String = "",
override val nameTranslated: LocalizedValueMap? = null,
Expand Down Expand Up @@ -215,6 +225,22 @@ data class UpdatedProduct(
required = required
)

fun createSwatchesOption(
name: String = "",
nameTranslated: LocalizedValueMap? = null,
choices: List<ProductOptionChoice> = listOf(),
defaultChoice: Int? = null,
required: Boolean? = null,
useImageAsSwatchSelector: Boolean = false,
) = SwatchesOption(
name = name,
nameTranslated = nameTranslated,
choices = choices,
defaultChoice = defaultChoice,
required = required,
useImageAsSwatchSelector = useImageAsSwatchSelector,
)

fun createCheckboxOption(
name: String = "",
nameTranslated: LocalizedValueMap? = null,
Expand Down Expand Up @@ -276,6 +302,8 @@ data class UpdatedProduct(
val textTranslated: LocalizedValueMap? = null,
val priceModifier: Double? = null,
val priceModifierType: PriceModifierType? = null,
val hexCodes: List<String>? = null,
val imageId: String? = null,
)

data class ShippingSettings(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,15 @@ data class FetchedProduct(
override val required: Boolean = false
) : ProductOption(ProductOptionType.RADIO), ChoiceBased

data class SwatchesOption(
override val name: String = "",
override val nameTranslated: LocalizedValueMap? = null,
override val choices: List<ProductOptionChoice> = listOf(),
override val defaultChoice: Int = 0,
override val required: Boolean = false,
val useImageAsSwatchSelector: Boolean = false,
) : ProductOption(ProductOptionType.SWATCHES), ChoiceBased

data class CheckboxOption(
override val name: String = "",
override val nameTranslated: LocalizedValueMap? = null,
Expand Down Expand Up @@ -277,7 +286,9 @@ data class FetchedProduct(
val text: String = "",
val textTranslated: LocalizedValueMap? = null,
val priceModifier: Double = 0.0,
val priceModifierType: PriceModifierType = PriceModifierType.ABSOLUTE
val priceModifierType: PriceModifierType = PriceModifierType.ABSOLUTE,
val hexCodes: List<String>? = null,
val imageId: String? = null,
)

data class ShippingSettings(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,7 @@ class CategoriesTest : BaseEntityTest() {
// Searching categories with different combinations of baseUrl and cleanUrls parameters
assertCategoryUrlMatchesRegex(
categorySearchRequest = CategoriesSearchRequest(),
urlPattern = "https://.*.company.site.*/products/Category-.*c.*"
urlPattern = "https://.*.company.site.*/products#!/Category-.*c.*"
)
assertCategoryUrlMatchesRegex(
categorySearchRequest = CategoriesSearchRequest(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ class ProductsTest : BaseEntityTest() {
// Searching products with different combinations of baseUrl and cleanUrls parameters
assertProductUrlMatchesRegex(
productSearchRequest = ByFilters(keyword = productCreateRequest.newProduct.sku),
urlPattern = "https://.*.company.site.*/products/Product-.*p.*"
urlPattern = "https://.*.company.site.*/products#!/Product-.*p.*"
)
assertProductUrlMatchesRegex(
productSearchRequest = ByFilters(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ val nonnullPropertyRules: List<NonnullPropertyRule<*, *>> = listOf(
IgnoreNonnull(UpdatedProduct.ProductOption.SelectOption::name),
IgnoreNonnull(UpdatedProduct.ProductOption.SizeOption::choices),
IgnoreNonnull(UpdatedProduct.ProductOption.SizeOption::name),
IgnoreNonnull(UpdatedProduct.ProductOption.SwatchesOption::choices),
IgnoreNonnull(UpdatedProduct.ProductOption.SwatchesOption::name),
IgnoreNonnull(UpdatedProduct.ProductOption.SwatchesOption::useImageAsSwatchSelector),
IgnoreNonnull(UpdatedProduct.ProductOption.TextAreaOption::name),
IgnoreNonnull(UpdatedProduct.ProductOption.TextFieldOption::name),
IgnoreNonnull(UpdatedProduct.ProductOptionChoice::text),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,12 @@ val fetchedProductNullablePropertyRules: List<NullablePropertyRule<*, *>> = list
IgnoreNullable(FetchedProduct.ProductOption.RadioOption::nameTranslated),
IgnoreNullable(FetchedProduct.ProductOption.SelectOption::nameTranslated),
IgnoreNullable(FetchedProduct.ProductOption.SizeOption::nameTranslated),
AllowNullable(FetchedProduct.ProductOption.SwatchesOption::nameTranslated),
IgnoreNullable(FetchedProduct.ProductOption.TextAreaOption::nameTranslated),
IgnoreNullable(FetchedProduct.ProductOption.TextFieldOption::nameTranslated),
IgnoreNullable(FetchedProduct.ProductOptionChoice::textTranslated),
AllowNullable(FetchedProduct.ProductOptionChoice::hexCodes),
AllowNullable(FetchedProduct.ProductOptionChoice::imageId),
IgnoreNullable(FetchedProduct.RelatedCategory::categoryId),
IgnoreNullable(FetchedProduct.RelatedCategory::enabled),
IgnoreNullable(FetchedProduct.RelatedCategory::productCount),
Expand Down