| 6 | "": "const accountId = context.accountId;\\\\r\\\\nif (!accountId) {\\\\r\\\\n return <h1>Please connect your wallet!</h1>;\\\\r\\\\n}\\\\r\\\\nlet { src } = props;\\\\r\\\\n\\\\r\\\\nlet contract = \\\\\\\"checks.integrations.near\\\\\\\";\\\\r\\\\n\\\\r\\\\nconst [verificationItems, setVerificationItems] = useState([\\\\r\\\\n {\\\\r\\\\n title: \\\\\\\"Verify Account is Older than 1 year\\\\\\\",\\\\r\\\\n status: false,\\\\r\\\\n endpoint: \\\\\\\"/account-age\\\\\\\",\\\\r\\\\n viewMethod: \\\\\\\"is_one_year_old\\\\\\\",\\\\r\\\\n changeMethod: \\\\\\\"update_contract_age\\\\\\\",\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n title: \\\\\\\"Verify Account is Older than 6 months\\\\\\\",\\\\r\\\\n status: false,\\\\r\\\\n endpoint: \\\\\\\"/account-age\\\\\\\",\\\\r\\\\n viewMethod: \\\\\\\"six_month_old\\\\\\\",\\\\r\\\\n changeMethod: \\\\\\\"update_contract_age\\\\\\\",\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n title: \\\\\\\"Verify Account is Older than 2 year\\\\\\\",\\\\r\\\\n status: false,\\\\r\\\\n endpoint: \\\\\\\"/account-age\\\\\\\",\\\\r\\\\n viewMethod: \\\\\\\"is_two_year_old\\\\\\\",\\\\r\\\\n changeMethod: \\\\\\\"update_contract_age\\\\\\\",\\\\r\\\\n },\\\\r\\\\n {\\\\r\\\\n title: \\\\\\\"Verify Account has connected to more than 5 contracts\\\\\\\",\\\\r\\\\n status: false,\\\\r\\\\n endpoint: \\\\\\\"/connected-contracts\\\\\\\",\\\\r\\\\n viewMethod: \\\\\\\"connected_to_5_contracts\\\\\\\",\\\\r\\\\n changeMethod: \\\\\\\"update_access_key\\\\\\\",\\\\r\\\\n },\\\\r\\\\n]);\\\\r\\\\n\\\\r\\\\nconst [selectedIndex, setSelectedIndex] = useState(src || null);\\\\r\\\\n\\\\r\\\\nconst wrapper = styled.div`\\\\r\\\\n font-family: sans-serif;\\\\r\\\\n margin: 0;\\\\r\\\\n padding: 20px;\\\\r\\\\n background-color: #f2f2f2;\\\\r\\\\n`;\\\\r\\\\n\\\\r\\\\n// VerificationCard\\\\r\\\\nconst VerificationCard = styled.div`\\\\r\\\\n background-color: #fff;\\\\r\\\\n border-radius: 5px;\\\\r\\\\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);\\\\r\\\\n padding: 20px;\\\\r\\\\n margin-bottom: 20px;\\\\r\\\\n display: flex;\\\\r\\\\n justify-content: space-between;\\\\r\\\\n align-items: center;\\\\r\\\\n transition: transform 0.2s ease-in-out;\\\\r\\\\n ${({ selected }) =>\\\\r\\\\n selected &&\\\\r\\\\n `\\\\r\\\\n background-color: blue;\\\\r\\\\n `}\\\\r\\\\n button {\\\\r\\\\n display: block;\\\\r\\\\n background-color: #337ab7;\\\\r\\\\n color: #fff;\\\\r\\\\n border: none;\\\\r\\\\n padding: 5px 10px;\\\\r\\\\n border-radius: 5px;\\\\r\\\\n cursor: pointer;\\\\r\\\\n font-size: 14px;\\\\r\\\\n transition: background-color 0.2s ease-in-out;\\\\r\\\\n }\\\\r\\\\n\\\\r\\\\n & + button { /* Spacing between buttons */\\\\r\\\\n margin-top: 10px;\\\\r\\\\n }\\\\r\\\\n\\\\r\\\\n &:hover {\\\\r\\\\n ${({ selected }) =>\\\\r\\\\n !selected &&\\\\r\\\\n `\\\\r\\\\n background-color: #2a69a5;\\\\r\\\\n `}\\\\r\\\\n position: relative;\\\\r\\\\n transform: scale(0.95);\\\\r\\\\n }\\\\r\\\\n`;\\\\r\\\\n\\\\r\\\\n// VerificationTitle\\\\r\\\\nconst VerificationTitle = styled.h3`\\\\r\\\\n font-size: 16px;\\\\r\\\\n font-weight: bold;\\\\r\\\\n color: #333;\\\\r\\\\n`;\\\\r\\\\n\\\\r\\\\n// VerificationStatus\\\\r\\\\nconst VerificationStatus = styled.div`\\\\r\\\\n font-size: 14px;\\\\r\\\\n color: red;\\\\r\\\\n`;\\\\r\\\\n\\\\r\\\\n// VerificationButton\\\\r\\\\nconst VerificationButton = styled.button`\\\\r\\\\n background-color: #337ab7;\\\\r\\\\n color: #fff;\\\\r\\\\n border: none;\\\\r\\\\n padding: 10px 20px;\\\\r\\\\n border-radius: 5px;\\\\r\\\\n cursor: pointer;\\\\r\\\\n font-size: 16px;\\\\r\\\\n transition: background-color 0.2s ease-in-out;\\\\r\\\\n\\\\r\\\\n &:hover {\\\\r\\\\n background-color: #2a69a5;\\\\r\\\\n }\\\\r\\\\n`;\\\\r\\\\n\\\\r\\\\nconst [verifications, setVerifications] = useState({\\\\r\\\\n accountAge: null, // null, true, or false\\\\r\\\\n contracts: null,\\\\r\\\\n balance: null,\\\\r\\\\n lensHandle: null,\\\\r\\\\n});\\\\r\\\\n\\\\r\\\\nconst handleVerify = async (index) => {\\\\r\\\\n const base_url = \\\\\\\"https://api.nearbadger.vercel.app/sign\\\\\\\";\\\\r\\\\n\\\\r\\\\n let action = verificationItems[index];\\\\r\\\\n asyncFetch(`${base_url}${action.endpoint}`, {\\\\r\\\\n method: \\\\\\\"POST\\\\\\\",\\\\r\\\\n headers: {\\\\r\\\\n \\\\\\\"Content-Type\\\\\\\": \\\\\\\"application/json\\\\\\\",\\\\r\\\\n },\\\\r\\\\n body: JSON.stringify({ accountId }),\\\\r\\\\n })\\\\r\\\\n .then((response) => {\\\\r\\\\n let res = response.body.signature;\\\\r\\\\n Near.call(\\\\r\\\\n contract,\\\\r\\\\n action.changeMethod,\\\\r\\\\n {\\\\r\\\\n signature: res.signature,\\\\r\\\\n account_info: res.accountInfo,\\\\r\\\\n max_block_height: res.expirationBlockHeight,\\\\r\\\\n },\\\\r\\\\n \\\\\\\"300000000000000\\\\\\\",\\\\r\\\\n \\\\\\\"10000000000000000000000\\\\\\\"\\\\r\\\\n );\\\\r\\\\n })\\\\r\\\\n .catch((err) => console.log(err));\\\\r\\\\n};\\\\r\\\\n\\\\r\\\\nconst handleSelection = (index, fromQ) => {\\\\r\\\\n if (selectedIndex !== index || fromQ) {\\\\r\\\\n const newItems = [...verificationItems];\\\\r\\\\n const selectedItem = newItems.splice(index, 1)[0]; // Remove selected item\\\\r\\\\n console.log(\\\\\\\"opium\\\\\\\", selectedItem);\\\\r\\\\n newItems.unshift(selectedItem); // Add selected item to the front\\\\r\\\\n setVerificationItems(newItems);\\\\r\\\\n console.log(\\\\\\\"updated?\\\\\\\", newItems, verificationItems);\\\\r\\\\n setSelectedIndex(0);\\\\r\\\\n }\\\\r\\\\n};\\\\r\\\\nconst isCardSelected = selectedIndex !== null;\\\\r\\\\n\\\\r\\\\nuseEffect(() => {\\\\r\\\\n Promise.all(\\\\r\\\\n verificationItems.map((item, index) =>\\\\r\\\\n Near.asyncView(contract, item.viewMethod, {\\\\r\\\\n account_id: accountId,\\\\r\\\\n }).then((result) => {\\\\r\\\\n const newItems = [...verificationItems];\\\\r\\\\n newItems[index].status = result;\\\\r\\\\n return newItems[index];\\\\r\\\\n })\\\\r\\\\n )\\\\r\\\\n ).then((newItemsArray) => {\\\\r\\\\n const mergedItems = newItemsArray.flat();\\\\r\\\\n setVerificationItems(mergedItems);\\\\r\\\\n if (src !== null) {\\\\r\\\\n handleSelection(src, true);\\\\r\\\\n }\\\\r\\\\n });\\\\r\\\\n}, [src]);\\\\r\\\\n\\\\r\\\\nreturn (\\\\r\\\\n <wrapper>\\\\r\\\\n <h2>Available Stamp Verifications</h2>\\\\r\\\\n {verificationItems.map((item, index) => (\\\\r\\\\n <VerificationCard\\\\r\\\\n key={index}\\\\r\\\\n selected={selectedIndex === index}\\\\r\\\\n onClick={() => setSelectedIndex(index)}\\\\r\\\\n >\\\\r\\\\n <VerificationTitle\\\\r\\\\n style={{ color: selectedIndex === index ? \\\\\\\"#fff\\\\\\\" : \\\\\\\"\\\\\\\" }}\\\\r\\\\n >\\\\r\\\\n {item.title}\\\\r\\\\n </VerificationTitle>\\\\r\\\\n <VerificationStatus verified={true}></VerificationStatus>\\\\r\\\\n <button\\\\r\\\\n style={{ backgroundColor: item.status ? \\\\\\\"green\\\\\\\" : \\\\\\\"\\\\\\\" }}\\\\r\\\\n verified={true}\\\\r\\\\n disabled={item.status || (isCardSelected && selectedIndex !== index)}\\\\r\\\\n onClick={() => handleVerify(index)}\\\\r\\\\n >\\\\r\\\\n {item.status ? \\\\\\\"Verified!\\\\\\\" : \\\\\\\"verify info\\\\\\\"}\\\\r\\\\n </button>\\\\r\\\\n </VerificationCard>\\\\r\\\\n ))}\\\\r\\\\n </wrapper>\\\\r\\\\n);\\\\r\\\\n" |