[{"id":"f322fea7-4ca5-4b5d-86c1-001912c850b2","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"f7bf5f33-288c-4893-b444-055be654e93a","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"4244ec5a-a6a9-42fc-9651-072233db3cf0","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"53155f14-d53e-4d53-a087-0a32d9b088e8","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"d5b83782-724a-4dcd-a518-0ae69944e387","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"7c54099b-4e27-4e88-91eb-0c637639e54d","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"20765fbe-aa2d-45e9-b63f-0efcc5225c16","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"17f5bd45-99ce-43d5-b68e-0f5049943703","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"8c11df37-0484-40c2-a9b4-103ead6c8314","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"1c4f2565-d1d8-4ad5-89d3-1980a756bab0","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"cccfd524-1150-4583-98f4-1c78277fb19b","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"18b5ea90-6de5-4399-90d1-2238cfb3382e","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"dac211bb-2f29-4663-8bb3-2359b67c5dc3","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"0d811d5c-d17f-4262-96ef-272da4fee248","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"83e0bc87-eb53-4a6c-a354-28ec6433cc9f","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"f3aca57e-9e1e-4242-a235-31898017ee25","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"af280636-785f-4b45-8c31-3433882a446a","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"6308caea-fbe5-4424-b9af-34c24356e951","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"6433ad22-3173-436a-8ff9-355a17142bc5","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"49c3c113-8550-43de-a6c8-35829e88e5e6","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"18eede08-b743-418d-94db-37c2af1dbc30","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"decb7443-11fe-4aa0-8b93-3c200275616a","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"6d98d12d-125b-4741-b4a5-3db1a0f2e301","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"5b251a9f-5a3b-4a44-8408-3fdcf02f3d90","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"1e5d6f9f-050e-4b0c-a881-41dd5951c7e5","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"9922f417-b683-48c6-bad6-439c91ebf668","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"c907e410-0d04-4906-ac6f-452336e8d44f","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"e36475b1-32f5-4b0b-a33b-47e34aa1a708","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"37f2c3b0-6b80-4da3-9d06-481bb204a2b1","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"5f15dcdb-9002-46de-9423-4d87ce9e8cb9","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"c126327a-cafc-49a4-8d18-4daaa1e9b2b0","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"6f091bb9-87ea-4ff0-9b1b-4f280c1d96c1","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"4ef5fa73-b193-400b-942e-51646095e0f5","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"6eed225d-831a-4ad0-ace7-52c306719b0e","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"3a5cd23f-8c36-47a0-ba1f-565c13d9dc41","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"3e527c36-c9a3-4850-bd83-578097ae97f4","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"2a064357-436f-48b6-9d47-57fafa83ca83","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"f28d747e-a0a9-4967-9940-581cdf4e6a07","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"28d36d47-c582-4210-a848-5ba48491bb80","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"bd4ffbde-fb59-44f0-8166-5de0e2f8dcb3","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"538ebc70-b737-4e61-a1a5-5f33e41367f6","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"7fc447a7-c879-424d-832b-603f956c3cb3","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"2e3972d0-8608-4a5c-920d-66734b85033c","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"c916ab18-d86f-45ce-b2ac-6aa47581a625","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"40a13a36-7246-4f8b-8ccc-6b5d494fc344","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"13811256-dbe9-48a8-88b9-6ec49b2467ac","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"4d4adcc8-433a-4969-9daa-732be28b5d0d","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"c3f78991-8a84-451e-8704-7414c1318b9e","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"664d4485-f5e8-49e4-9766-748abe7aeac2","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"3a548f28-610d-42d6-8602-7d982025750f","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"754efafe-744e-452e-9e46-833c9b36c763","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"59774e97-ff52-425e-8b41-8657dcb115ef","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"d5f1de25-5097-46ca-8e8c-881e41679af8","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"71cfa296-3ff8-4259-acc9-8d89d0268c3f","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"de1c695a-c31f-4884-8215-8eeb468cb36d","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"81fc1b9e-a9e4-41f6-be4f-9043eaa82970","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"8d952ce2-b977-4976-b8cb-91999367d807","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"e742bb05-9f35-412d-bac5-91f0094a7c44","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"bbbef556-1bcd-4fe9-8bd2-93593b315e0b","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"d3e0049c-437f-4361-b452-97464367f2ca","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"7d2857c8-1f21-4806-ae86-9a33ebef97c5","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"b26b60af-f0f9-4dc7-baba-9cb816e469df","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"7ccb20b2-7e36-4fe8-9c24-9fecc761cc4e","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"b3c7e8d4-8fd1-4c1f-891d-a01f59233ac7","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"9f59a948-51e5-4973-a1f2-a2317e6558b0","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"fd091a7c-6bb2-40d3-b471-a26eec95cf9e","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"d5b1f409-61c4-4e5b-838d-a61f619ad369","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"c610be2b-7242-4f96-a82d-ace5c6780110","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"ef28807f-c72f-4a28-8f05-b5b918225c63","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"473587ec-9bbe-400e-b1ba-be46ff5490c6","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"b2cc3c1a-3f57-47ac-838c-c60760ca2057","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"c5cc96ac-e1f4-442d-8a20-c91d613dfc8e","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"fcb88fc4-f83c-4c6c-8ef2-c9f726913d66","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"5a29931c-50d2-4535-ace2-cd9e0f04d9b8","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"c6a516da-4175-4615-8c69-cde1f1c97471","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"79ba78c3-596e-4c91-84e2-cf209029f9a7","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"7c93af39-5091-4a6d-ba35-d63aee420f6d","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"97dbcd20-2993-40b6-bd9d-d957fd36c682","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"7f0db861-bec6-4083-a3a1-dc63dc748d4d","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"b34be8fb-7180-4d6f-9a82-dca69d533948","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"5e710667-f653-4604-ab4e-e0e5f77b2001","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"a2c07f8c-4eb2-452a-b592-e7e868907e46","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"1652b4e6-63f5-4307-9a32-eae723728651","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"4c1940f2-b444-4821-b372-eba9877a246c","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"b4108347-e0ee-4c23-a269-ecf370879fef","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"4c3f9ce0-b19f-4784-985a-edd29b21e713","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"689fe533-2f18-436e-82ff-eefe1b908783","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"08e3a5db-2265-42d4-bd30-efc17de0d028","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"1b402080-435c-43f2-a191-f21385bb8dc7","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"e138f0f4-c8c7-49d7-8ea0-f65f8845d8e0","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]},{"id":"9bab41b8-5227-4c3b-8d40-f9ebae939eeb","tags":[{"name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce"}]},{"id":"2872e81a-93c5-4540-bd3b-fe8f172cddf8","tags":[{"name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99","links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d"}]}]
        
(Showing Draft Content)

Mask Input

An input mask is a string of characters that defines the format of input expected from the user. Masking an input reduces the chances of errors in data and helps maintain consistency in the database, making it easier to analyze and process data. You can create masks using user-generated rules consisting of patterns, placeholders, masking characters, etc.


SpreadJS provides a mask property and a pattern option to set the input mask. You can use the placeholder option to specify the placeholder. A placeholder is a string of characters that displays in the input field, represents the expected input format, and guides the user to provide input as per the format. If the user does not specify a placeholder, SpreadJS uses "_" by default. You can choose whether to display the placeholder character in the input string using the excludePlaceholder option.


For instance, if a mask pattern is "000000" and "_" is a placeholder, the blank input field displays "______" to indicate the required format of 6 digits. If the excludePlaceholder option is set to false (default) and the user inputs "1234", the input is saved as "1234____" after exiting edit mode. And when the option is true, the input is stored as "1234", that is, the placeholder is excluded.


Similarly, you can also exclude the literal characters by setting the excludeLiteral to true. Literals are characters that are displayed as it is at a specific position and cannot be replaced by any other character. Parentheses and hyphens used in phone numbers or a forward slash in date formats are a few examples.


The following code shows how to set an input mask:

    style = new GC.Spread.Sheets.Style();
    style.mask = {
        pattern: "[a0]{8}",
        excludePlaceholder: true
    };
    sheet.setStyle(14, 0, style);

    style1 = new GC.Spread.Sheets.Style();
    style1.mask = {
        pattern: "Au\\t\\hor: (Chris|Icey|Victor|Ian|Johnson|Ivan)",
        excludeLiteral: true
    };
    sheet.setStyle(15, 0, style1);

If a user inputs a character when the cursor is at placeholder, the new character replaces the placeholder character. In other cases, the new character is inserted. In case user input does not match the pattern, SpreadJS keeps the parts that match the pattern from left to right and drops the remaining invalid parts. However, when a user deletes some text, it deletes the current restriction content only. For instance, in the case of pattern ‘a{3}0{3}’, if a user starts deleting from the left most character of input, SpreadJS allows deletion of first three characters of the current restriction. To delete the remaining input, the user has to place the cursor in the beginning of the next restriction.


To confirm if a pattern is valid or not, SpreadJS provides a static method validatePattern. The following code shows how to use the validatePattern method to validate a pattern:

let sheet = spread.getActiveSheet();
let style = new GC.Spread.Sheets.Style();
let pattern = 'ISBN 0-00000-000-0';
let verifyResult = GC.Spread.Sheets.InputMask.validatePattern('[a0_]{8}');
if (verifyResult.success) {
  style.mask = {
    pattern: 'ISBN 0-00000-000-0'
  };
  sheet.setStyle(0,0,style);
}

Mask patterns are of two types:

  • String pattern

  • Date pattern

String Pattern

A string pattern is the simplest way of defining input format and is constructed using the minimum pattern unit. A minimum pattern unit consists of a character restriction and, optionally, a character length restriction. When character length restriction is not specified, it is considered to be one character. The following table defines various rules for creating patterns using these two types of restrictions.

Restriction type

Category

Pattern Character

Explanation

Sample Pattern

Display('_’ as placeholder)

Input

Output

Character length

Letters

a

Letter

aaa

___

abc

abc

>

Letter auto-converted to uppercase

>

_

a

A

><<<<

_____

chris

Chris

<

Letter auto-converted to lowercase

<

_

A

a

Numbers

0

Digit (0-9)

000

___

123

123

___

12

12_

Optional

()

Any of the strings in braces () should match.

0{1,3} (kg|lb)

_ kg

12 k

12kg

|

Delimiter between strings.

Used within braces().

Characters in braces() are static strings;

an escape character is not required inside braces.

Aut\\hor:(Chris|Icey|Victor|Ian)

or

(Author):(Chris|Icey|Victor|Ian)

Author:Chris

V

Author:Victor

[]

Combine the keywords and literals as a whole.

[>0]{5}

_____

a7osn

A7OSN

-

Indicates the character range.

Used within square braces[].

[\\a-f]

_

b

b

Special Char

\(should use “\\” when construct pattern string)

Escape Character

0\>0

_>_

32

3>2

#

Any Character

###

___

a1&

a1&

Character length restriction

Dynamic

{n}

"n" times repeat

0{4}/0{2}/0{2}

____/__/__

20230101

2023/01/01

{n,m}

Minimum "n" times and maximum "m" times repeat

0{1,3}.0{1,3}.0{1,3}.0{1,3}

_._._._

1270.0.1

127.0.0.1

[\\01]{0,}


1010

1010

{,m}

Upto "m" times repeat

0{,3}


123

123

{n,}

Minimum "n" times repeat

0{1,}.0{2}

_.__

1234.56

1234.56

In dynamic patterns:

  • The placeholder only represents the minimum length required. For example: 0{2,10} displays "__" and 0{0,1} displays nothing.

  • If "m" is not specified, dynamic patterns take maximum length of 2147483648.

Date Pattern

The date pattern is a way to specify the format of date and time values. It is a fixed format pattern and does not accept character length restrictions. In the case of a date pattern, SpreadJS automatically fixes the user input by the date rule. However, you must not repeat date time items such as yyyy, MM etc. in a single pattern. For example, "yyyy/MM/dd yyyy" is an invalid pattern because "yyyy" is used twice.


The following table describes various masking characters of the date pattern and their usage with the help of sample patterns.

Pattern Character

Description

Sample Pattern

Display '_' as placeholder

User Input

Output

y

Years

yy/MM/dd

__/__/__

23317

23/03/17

yyyy/MM/dd

____/__/__

2023317

2023/03/17

M

Months

yyyy/M/dd

____/_/__

2023317

2023/3/17

yyyy/MM/dd

____/__/__

2023317

2023/03/17

d

Days

yyyy/MM/d

____/__/_

202337

2023/03/7

yyyy/MM/dd

____/__/__

202337

2023/03/07

H

24 Hours

HH:mm:ss

__:__:__

2277

22:07:07

H:mm:ss

_:__:__

577

5:07:07

h

12 Hours

hh:mm:ss (am|pm)

__:__:__ am

277 p

02:07:07 pm

h:mm:ss (pm|am)

_:__:__ pm

277 a

2:07:07 am

m

Minutes

HH:mm:ss

__:__:__

2277

22:07:07

HH:m:ss

__:_:__

2277

22:7:07

s

Seconds

HH:mm:ss

__:__:__

2277

22:07:07

HH:mm:s

__:__:_

2277

22:07:7

t

Hour Format

hh:mm:ss t

__:__:__ A

2277p

22:07:07 P

hh:mm:ss tt

__:__:__ AM

2277p

22:07:07 PM

Named Pattern

You can also define named patterns and reuse them in other patterns. However, if there is a string in the pattern that matches any name in the namedPatterns, the mask replaces it with the named pattern. Hence, it is recommended to define patterns with names that have minimum chances of repetition. To get the list of all name patterns, SpreadJS provides a static method getNamedPatterns.

// define a named pattern
GC.Spread.Sheets.InputMask.namedPattern('enterdate', 'MM/dd/yyyy hh:mm tt');
let style = new GC.Spread.Sheets.Style();
style.mask = {
  // reuse it in another pattern
  pattern: '(start): enterdate'
};
sheet.setStyle(0, 0, style);

Formula Pattern

SpreadJS also supports formula patterns, that is, the patterns that are in the form of formula and start from "=". For example, if cell A1-A3 of a worksheet are names of the authors"Chris", "Icey", and "Ian", then the following two patterns give the same result.

Formula Pattern

Equivalent Pattern

'="Aut\\hor:("&TEXTJOIN("|",TRUE,A1:A3)&")"'

'Aut\\hor:(Chris|Icey|Ian)'

The static method validatePattern that confirms if a pattern is valid or not, does not support formula patterns. To evaluate formula patterns, use GC.Spread.Sheets.CalcEngine.evaluateFormula before calling the validatePattern method.

  • The characters in () pattern are a static string, so (am|pm) can be written as it is without using an escape character.

  • When a group restriction has only one group item, the mask treats it as a static string.

  • By default, the mask displays first item of the group restriction in input. On receiving user input, the mask automatically completes the group item text.

  • For better input experience, group restrictions are not case-sensitive.

  • For a static string or group text, SpreadJS does not support quantifiers. Hence, you must not set patterns like 1234{1,5}, (12|34){1,5} etc.

  • SpreadJS does not support nesting of group “()” and optional “[]”.

  • When a masked cell enters the edit mode, the internal formula textbox is prevented, and the external formula textbox is readonly.

  • A mask does not take effect when a formula cell enters edit mode.

  • After editing with a mask, if the editor value starts with “=”, “-”, “+”, quotePrefix is added automatically.

Example Patterns

The following table lists commonly used patterns for quick reference:

Case

Pattern or Options

Display

Input

Output

E-mail

[a0]{1,}@[a0]{1,}.(com|cn|gov|edu)

_@_.com

chris@grapecity.e

chris@grapecity.edu

Name

><{1,} ><{1,}

__ __

chris diao

Chris Diao

Long date

dd-MM-yyyy HH:mm

__-__-____ __:__

16720231620

16-07-2023 16:20

Short date

dd-MM-yyyy

__-__-____

1672023

16-07-2023

Verification code

[>0]{5}

_____

a7osn

A7OSN

Decimal number

[\-]{,1}0{0,}[.]{,1}0{0,}


-12.34

-12.34

12.34

12.34

Binary number

[\\01]{0,}


10101

10101

US phone number

[\\(]0{3}[\\)][-]0{3}[-]0{4}

(___)-___-____

1234567890

(123)-456-7890