Extensión: loyalty-rewards-tile · Shopify CLI 3.x · Preact · TypeScript
node scripts/search_docs.mjs "smart grid tile loyalty button"
node scripts/validate.mjs --code '...' --model claude-sonnet-4-6 --client-name claude-code --artifact-id art_8f2c19e --revision 1
import { reactExtension, useApi, Button, Text, Screen, ScrollView, Tile } from "@shopify/ui-extensions-react/point-of-sale"; import { SmartGridTileApi } from "@shopify/ui-extensions/point-of-sale"; /** Tile de fidelización en Smart Grid de Shopify POS */ const LoyaltyRewardsTile = () => { const api = useApi<SmartGridTileApi>(); // Puntos del cliente actual (obtenidos del contexto POS) const customerPoints = api.customer.metafields.get("loyalty.points") ?? 0; const tier = customerPoints >= 500 ? "Gold" : customerPoints >= 100 ? "Silver" : "Bronze"; const handleRedeem = async () => { await api.navigation.navigate("loyalty-redeem"); }; return ( <Tile title={`Fidelización · ${tier}`} subtitle={`${customerPoints} pts disponibles`} onPress={handleRedeem} enabled={customerPoints > 0} /> ); }; export default reactExtension( "pos.home.tile.render", () => <LoyaltyRewardsTile /> );
api_version = "2024-07" [[extensions]] type = "ui_extension" name = "Loyalty Rewards Tile" handle = "loyalty-rewards-tile" [extensions.targeting] [[extensions.targeting.targets]] target = "pos.home.tile.render" module = "./src/LoyaltyRewardsTile.tsx" [extensions.capabilities] api_access = true metafields = [ { namespace = "loyalty", key = "points" } ]