diff --git a/package-lock.json b/package-lock.json
index 15586c0..76d4040 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,16 +11,24 @@
"@emotion/react": "^11.11.3",
"@emotion/styled": "^11.11.0",
"@reduxjs/toolkit": "^2.0.1",
+ "@tanstack/react-query": "^5.17.9",
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
+ "axios": "^1.6.5",
+ "global": "^4.4.0",
+ "query-string": "^8.1.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
+ "react-query": "^3.39.3",
"react-redux": "^9.0.4",
"react-router": "^6.21.1",
"react-router-dom": "^6.21.1",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
+ },
+ "devDependencies": {
+ "@tanstack/react-query-devtools": "^5.17.9"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
@@ -3874,6 +3882,57 @@
"url": "https://github.com/sponsors/gregberge"
}
},
+ "node_modules/@tanstack/query-core": {
+ "version": "5.17.9",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.17.9.tgz",
+ "integrity": "sha512-8xcvpWIPaRMDNLMvG9ugcUJMgFK316ZsqkPPbsI+TMZsb10N9jk0B6XgPk4/kgWC2ziHyWR7n7wUhxmD0pChQw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/query-devtools": {
+ "version": "5.17.7",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.17.7.tgz",
+ "integrity": "sha512-TfgvOqza5K7Sk6slxqkRIvXlEJoUoPSsGGwpuYSrpqgSwLSSvPPpZhq7hv7hcY5IvRoTNGoq6+MT01C/jILqoQ==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/react-query": {
+ "version": "5.17.9",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.17.9.tgz",
+ "integrity": "sha512-M5E9gwUq1Stby/pdlYjBlL24euIVuGbWKIFCbtnQxSdXI4PgzjTSdXdV3QE6fc+itF+TUvX/JPTKIwq8yuBXcg==",
+ "dependencies": {
+ "@tanstack/query-core": "5.17.9"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0"
+ }
+ },
+ "node_modules/@tanstack/react-query-devtools": {
+ "version": "5.17.9",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.17.9.tgz",
+ "integrity": "sha512-1viWP/jlO0LaeCdtTFqtF1k2RfM3KVpvwVffWv+PMNkS2u4s8YGUM17r3p82udbF9BY1mE7aHqQ3MM1errF5lQ==",
+ "dev": true,
+ "dependencies": {
+ "@tanstack/query-devtools": "5.17.7"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "@tanstack/react-query": "^5.17.9",
+ "react": "^18.0.0"
+ }
+ },
"node_modules/@testing-library/dom": {
"version": "9.3.3",
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz",
@@ -5622,6 +5681,29 @@
"node": ">=4"
}
},
+ "node_modules/axios": {
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz",
+ "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==",
+ "dependencies": {
+ "follow-redirects": "^1.15.4",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/axios/node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/axobject-query": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
@@ -5935,6 +6017,14 @@
"node": ">= 8.0.0"
}
},
+ "node_modules/big-integer": {
+ "version": "1.6.52",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
+ "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
"node_modules/big.js": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
@@ -6045,6 +6135,21 @@
"node": ">=8"
}
},
+ "node_modules/broadcast-channel": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz",
+ "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==",
+ "dependencies": {
+ "@babel/runtime": "^7.7.2",
+ "detect-node": "^2.1.0",
+ "js-sha3": "0.8.0",
+ "microseconds": "0.2.0",
+ "nano-time": "1.0.0",
+ "oblivious-set": "1.0.0",
+ "rimraf": "3.0.2",
+ "unload": "2.2.0"
+ }
+ },
"node_modules/browser-process-hrtime": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
@@ -7014,6 +7119,14 @@
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
"integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
},
+ "node_modules/decode-uri-component": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.4.1.tgz",
+ "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==",
+ "engines": {
+ "node": ">=14.16"
+ }
+ },
"node_modules/dedent": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
@@ -7263,6 +7376,11 @@
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
+ "node_modules/dom-walk": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
+ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
+ },
"node_modules/domelementtype": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
@@ -8556,6 +8674,17 @@
"node": ">=8"
}
},
+ "node_modules/filter-obj": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz",
+ "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/finalhandler": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
@@ -9063,6 +9192,15 @@
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
},
+ "node_modules/global": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
+ "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+ "dependencies": {
+ "min-document": "^2.19.0",
+ "process": "^0.11.10"
+ }
+ },
"node_modules/global-modules": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
@@ -12213,6 +12351,11 @@
"jiti": "bin/jiti.js"
}
},
+ "node_modules/js-sha3": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
+ "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -12605,6 +12748,15 @@
"tmpl": "1.0.5"
}
},
+ "node_modules/match-sorter": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz",
+ "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "remove-accents": "0.4.2"
+ }
+ },
"node_modules/mdn-data": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
@@ -12667,6 +12819,11 @@
"node": ">=8.6"
}
},
+ "node_modules/microseconds": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz",
+ "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA=="
+ },
"node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
@@ -12705,6 +12862,14 @@
"node": ">=6"
}
},
+ "node_modules/min-document": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
+ "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==",
+ "dependencies": {
+ "dom-walk": "^0.1.0"
+ }
+ },
"node_modules/min-indent": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
@@ -12850,6 +13015,14 @@
"thenify-all": "^1.0.0"
}
},
+ "node_modules/nano-time": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz",
+ "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==",
+ "dependencies": {
+ "big-integer": "^1.6.16"
+ }
+ },
"node_modules/nanoid": {
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
@@ -13121,6 +13294,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/oblivious-set": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz",
+ "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw=="
+ },
"node_modules/obuf": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
@@ -14779,6 +14957,14 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -14839,6 +15025,11 @@
"node": ">= 0.10"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
"node_modules/psl": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
@@ -14875,6 +15066,22 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/query-string": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-8.1.0.tgz",
+ "integrity": "sha512-BFQeWxJOZxZGix7y+SByG3F36dA0AbTy9o6pSmKFcFz7DAj0re9Frkty3saBn3nHo3D0oZJ/+rx3r8H8r8Jbpw==",
+ "dependencies": {
+ "decode-uri-component": "^0.4.1",
+ "filter-obj": "^5.1.0",
+ "split-on-first": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/querystringify": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
@@ -15127,6 +15334,31 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
},
+ "node_modules/react-query": {
+ "version": "3.39.3",
+ "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz",
+ "integrity": "sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "broadcast-channel": "^3.4.1",
+ "match-sorter": "^6.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ }
+ }
+ },
"node_modules/react-redux": {
"version": "9.0.4",
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.0.4.tgz",
@@ -15443,6 +15675,11 @@
"node": ">= 0.10"
}
},
+ "node_modules/remove-accents": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz",
+ "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA=="
+ },
"node_modules/renderkid": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz",
@@ -16216,6 +16453,17 @@
"wbuf": "^1.7.3"
}
},
+ "node_modules/split-on-first": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-3.0.0.tgz",
+ "integrity": "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -17347,6 +17595,15 @@
"node": ">= 10.0.0"
}
},
+ "node_modules/unload": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz",
+ "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==",
+ "dependencies": {
+ "@babel/runtime": "^7.6.2",
+ "detect-node": "^2.0.4"
+ }
+ },
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
diff --git a/package.json b/package.json
index b9f6017..62b9758 100644
--- a/package.json
+++ b/package.json
@@ -6,11 +6,16 @@
"@emotion/react": "^11.11.3",
"@emotion/styled": "^11.11.0",
"@reduxjs/toolkit": "^2.0.1",
+ "@tanstack/react-query": "^5.17.9",
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
+ "axios": "^1.6.5",
+ "global": "^4.4.0",
+ "query-string": "^8.1.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
+ "react-query": "^3.39.3",
"react-redux": "^9.0.4",
"react-router": "^6.21.1",
"react-router-dom": "^6.21.1",
@@ -40,5 +45,8 @@
"last 1 firefox version",
"last 1 safari version"
]
+ },
+ "devDependencies": {
+ "@tanstack/react-query-devtools": "^5.17.9"
}
}
diff --git a/public/example1.png b/public/example1.png
new file mode 100644
index 0000000..9f60007
Binary files /dev/null and b/public/example1.png differ
diff --git a/public/example2.jpg b/public/example2.jpg
new file mode 100644
index 0000000..f359b62
Binary files /dev/null and b/public/example2.jpg differ
diff --git a/public/example3.jpg b/public/example3.jpg
new file mode 100644
index 0000000..c2b969f
Binary files /dev/null and b/public/example3.jpg differ
diff --git a/public/example4.jpg b/public/example4.jpg
new file mode 100644
index 0000000..3bcd914
Binary files /dev/null and b/public/example4.jpg differ
diff --git a/public/example5.jpg b/public/example5.jpg
new file mode 100644
index 0000000..d2cd5f6
Binary files /dev/null and b/public/example5.jpg differ
diff --git a/src/App.js b/src/App.js
index 0ccd338..ecf4910 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,15 +1,15 @@
-import React from 'react'
-import { Global } from '@emotion/react'
-import { BrowserRouter } from 'react-router-dom'
-import PageRoute from './PageRoute'
-
-const App = () =>{
+import PageRoute from "./PageRoute";
+import { BrowserRouter as Router } from "react-router-dom";
+import React from "react";
+import { Global } from "@emotion/react";
+import { BrowserRouter } from "react-router-dom";
+const App = () => {
return (
-
+
);
};
-export default App;
\ No newline at end of file
+export default App;
diff --git a/src/PageRoute.js b/src/PageRoute.js
index ad6ba6a..7452614 100644
--- a/src/PageRoute.js
+++ b/src/PageRoute.js
@@ -1,48 +1,60 @@
-import React from 'react'
-import { Routes, Route, useParams} from 'react-router-dom'
-import Dongui from './pages/donate/donategui.js'
-import Mydonation from './pages/donate/mydonation.js'
-import Mypage from './pages/donate/mypage.js'
-import Nickname from './pages/donate/nickname.js'
-import Userlogin from './pages/donate/userlogin.js'
-import Process1 from './pages/donate/process1.js'
-import Process2 from './pages/donate/process2.js'
-import Process3 from './pages/donate/process3.js'
-import Process4 from './pages/donate/process4.js'
-import Process5 from './pages/donate/process5.js'
-import Process6 from './pages/donate/process6.js'
-import Done from './pages/donate/done.js'
+import React from "react";
+import { Routes, Route, useParams } from "react-router-dom";
+import Dongui from "./pages/donate/donategui.js";
+import Mydonation from "./pages/donate/mydonation.js";
+import Mypage from "./pages/donate/mypage.js";
+// import Nickname from "./pages/donate/nickname.js";
+import Process1 from "./pages/donate/process1.js";
+import Process3 from "./pages/donate/process3.js";
+import Process4 from "./pages/donate/process4.js";
+import Process5 from "./pages/donate/process5.js";
+import Process6 from "./pages/donate/process6.js";
+import Done from "./pages/donate/done.js";
+import AgencyLogin from "./pages/reciever/agencylogin.js";
+import AgencySignUp from "./pages/reciever/agencysignup.js";
+import BookList from "./pages/reciever/booklist.js";
+import Finish from "./pages/reciever/finish.js";
+import SearchBooks from "./pages/reciever/searchbooks.js";
+import Choose from "./pages/main/choose.js";
+import Gui from "./pages/main/gui.js";
+import Check from "./pages/main/check.js";
+import Login from "./pages/main/userlogin.js";
+import Usersingup from "./pages/main/usersignup.js";
+import SearchBookList from "./pages/reciever/searchbooklist.js";
+import BookInfo from "./pages/reciever/bookinfo.js";
+import Process2 from "./pages/donate/process2.js";
-import Choose from './pages/main/choose.js'
-import Gui from './pages/main/gui.js'
-import Check from './pages/main/check.js'
-import Login from './pages/main/login.js'
-
-
-
-const PageRoute = () =>{
-const { id } = useParams();
-return (
+const PageRoute = () => {
+ return (
- }>
- }>
- }>
- }>
- }>
- }>
- }>
- }>
- }>
- }>
- }>
- }>
- }>
- }>
- }>
- }>
+ }>
+ }>
+ }>
+ }>
+ }>
+ }>
+ {/* }> */}
+ }>
+ }>
+ }>
+ }>
+ }>
+ }>
+ }>
+ }>
+ }>
+ }>
+ }>
+ }>
+ }>
+ }>
+ }>
+ }
+ >
-)
-}
-
+ );
+};
-export default PageRoute;
\ No newline at end of file
+export default PageRoute;
diff --git a/src/assets/background.png b/src/assets/background.png
new file mode 100644
index 0000000..95439b8
Binary files /dev/null and b/src/assets/background.png differ
diff --git a/src/assets/giftbox_blue.png b/src/assets/giftbox_blue.png
new file mode 100644
index 0000000..548ac85
Binary files /dev/null and b/src/assets/giftbox_blue.png differ
diff --git a/src/components/BookStatus.jsx b/src/components/BookStatus.jsx
new file mode 100644
index 0000000..18b4e26
--- /dev/null
+++ b/src/components/BookStatus.jsx
@@ -0,0 +1,74 @@
+import { Link, useNavigate } from "react-router-dom";
+import { Navigate } from "react-router-dom";
+const BookStatus = ({
+ id,
+ title,
+ curriculum,
+ subject,
+ publisher,
+ outsideImageUrl,
+}) => {
+ const handleClick = () => {
+ navigate("/reciever/bookinfo", {
+ state: {
+ title: title,
+ curriculum: curriculum,
+ subject: subject,
+ publisher: publisher,
+ outsideImageUrl: outsideImageUrl,
+ },
+ });
+ };
+ const navigate = useNavigate();
+ return (
+
+
+
+
+
+
+ {/* Text container */}
+
+
+ 책 제목 : {title}
+
+
+ 학년 : {curriculum}
+
+
+ 과목 : {subject}
+
+
출판사 : {publisher}
+
+
+
+ );
+};
+
+export default BookStatus;
diff --git a/src/components/Form1.js b/src/components/Form1.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/components/InputField.jsx b/src/components/InputField.jsx
new file mode 100644
index 0000000..006f85c
--- /dev/null
+++ b/src/components/InputField.jsx
@@ -0,0 +1,16 @@
+import "../styles/inputfield.css";
+
+const InputField = ({ label, type, placeholder, value, onChange }) => (
+
+);
+
+export default InputField;
diff --git a/src/components/InputField2.jsx b/src/components/InputField2.jsx
new file mode 100644
index 0000000..8bacd3f
--- /dev/null
+++ b/src/components/InputField2.jsx
@@ -0,0 +1,15 @@
+import "../styles/inputfield.css";
+
+const InputField2 = ({ type, placeholder, value, onChange }) => (
+
+
+
+);
+
+export default InputField2;
diff --git a/src/components/Layout/Header.js b/src/components/Layout/Header.js
index 54fee7f..721ad65 100644
--- a/src/components/Layout/Header.js
+++ b/src/components/Layout/Header.js
@@ -1,115 +1,113 @@
-import styled from '@emotion/styled'
-import { useLocation, useNavigate } from 'react-router-dom'
-import { common } from '../../styles/common'
-import Preview from '../../assets/icon/Preview.png'
-import bar0 from '../../assets/icon/bar0.png'
-import bar20 from '../../assets/icon/bar20.png'
-import bar40 from '../../assets/icon/bar40.png'
-import bar60 from '../../assets/icon/bar60.png'
-import bar80 from '../../assets/icon/bar80.png'
-import bar99 from '../../assets/icon/bar99.png'
-
-const Header = () =>{
-const location = useLocation()
-const navigate = useNavigate()
-const currentPath = location.pathname
-let headerContents = '';
-let cloudSrc = ''; // Default cloud image
-
-switch (currentPath) {
-
- case '/choose':
- headerContents = '나의 끝이, 누군가의 시작이 되길';
- break;
-
- case '/check':
- headerContents = '나의 끝이, 누군가의 시작이 되길';
- break;
-
- case '/donate/gui':
- headerContents = '나의 끝이, 누군가의 시작이 되길';
- break;
-
- case '/donate/process1':
- headerContents = '나의 끝이, 누군가의 시작이 되길';
- cloudSrc =bar0
- break;
-
- case '/donate/process2':
- headerContents = '나의 끝이, 누군가의 시작이 되길';
- cloudSrc =bar20
- break;
-
- case '/donate/process3':
- headerContents = '나의 끝이, 누군가의 시작이 되길';
- cloudSrc =bar40
- break;
-
- case '/donate/process4':
- headerContents = '나의 끝이, 누군가의 시작이 되길';
- cloudSrc =bar60
- break;
-
- case '/donate/process5':
- headerContents = '나의 끝이, 누군가의 시작이 되길';
- cloudSrc =bar80
- break;
-
- case '/donate/process6':
- headerContents = '나의 끝이, 누군가의 시작이 되길';
- cloudSrc =bar99
- break;
-
+import styled from "@emotion/styled";
+import { useLocation, useNavigate } from "react-router-dom";
+import { common } from "../../styles/common";
+import Preview from "../../assets/icon/Preview.png";
+import bar0 from "../../assets/icon/bar0.png";
+import bar20 from "../../assets/icon/bar20.png";
+import bar40 from "../../assets/icon/bar40.png";
+import bar60 from "../../assets/icon/bar60.png";
+import bar80 from "../../assets/icon/bar80.png";
+import bar99 from "../../assets/icon/bar99.png";
+
+const Header = () => {
+ const location = useLocation();
+ const navigate = useNavigate();
+ const currentPath = location.pathname;
+ let headerContents = "";
+ let cloudSrc = ""; // Default cloud image
+
+ switch (currentPath) {
+ case "/choose":
+ headerContents = "나의 끝이, 누군가의 시작이 되길";
+ break;
+
+ case "/check":
+ headerContents = "나의 끝이, 누군가의 시작이 되길";
+ break;
+
+ case "/donate/gui":
+ headerContents = "나의 끝이, 누군가의 시작이 되길";
+ break;
+
+ case "/donate/process1":
+ headerContents = "나의 끝이, 누군가의 시작이 되길";
+ cloudSrc = bar0;
+ break;
+
+ case "/donate/process2":
+ headerContents = "나의 끝이, 누군가의 시작이 되길";
+ cloudSrc = bar20;
+ break;
+
+ case "/donate/process3":
+ headerContents = "나의 끝이, 누군가의 시작이 되길";
+ cloudSrc = bar40;
+ break;
+
+ case "/donate/process4":
+ headerContents = "나의 끝이, 누군가의 시작이 되길";
+ cloudSrc = bar60;
+ break;
+
+ case "/donate/process5":
+ headerContents = "나의 끝이, 누군가의 시작이 되길";
+ cloudSrc = bar80;
+ break;
+
+ case "/donate/process6":
+ headerContents = "나의 끝이, 누군가의 시작이 되길";
+ cloudSrc = bar99;
+ break;
default:
- headerContents = '나의 끝이, 누군가의 시작이 되길';
-}
+ headerContents = "나의 끝이, 누군가의 시작이 되길";
+ }
-const BackLocation = () => {
- navigate(-1)
-}
+ const BackLocation = () => {
+ navigate(-1);
+ };
-return (
+ return (
-
-
-
- {headerContents}
- {cloudSrc && }
+
+
+
+ {headerContents}
+ {cloudSrc && }
-)
-}
+ );
+};
const HeaderWarp = styled.header`
-z-index:1;
-height: 30px;
-font-weight: 700;
-line-height: 50px;
-background:;
-text-align:center;
-position:sticky;
-top:0;
-width:100%;
-background:${common.colors.white};
-display:flex;
-align-items:center;
-justify-content:center;
-font-size:${common.fontSize.fz16};
-`
+ z-index: 1;
+ height: 30px;
+ font-weight: 700;
+ line-height: 50px;
+ background: ;
+ text-align: center;
+ position: sticky;
+ top: 0;
+ width: 100%;
+ background: ${common.colors.white};
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: ${common.fontSize.fz16};
+`;
const BackButton = styled.button`
-position: absolute;
-top: 50%;
-left: 24px;
-transform: translateY(-50%);
-border: none;
-background : none;
-`
+ position: absolute;
+ top: 50%;
+ left: 24px;
+ transform: translateY(-50%);
+ border: none;
+ background: none;
+`;
const Cloud = styled.img`
-position:absolute;
-bottom:0;
-bottom: -100%;
-width: 100%;
-z-index:-1;
-`
-
-export default Header
\ No newline at end of file
+ position: absolute;
+ bottom: 0;
+ bottom: -100%;
+ width: 100%;
+ z-index: -1;
+`;
+
+export default Header;
diff --git a/src/components/postbtngo.js b/src/components/postbtngo.js
index 667560b..95d271d 100644
--- a/src/components/postbtngo.js
+++ b/src/components/postbtngo.js
@@ -19,7 +19,7 @@ const StyledLink = styled(Link)`
width: 90%;
right: 0;
padding: 0 ${common.padding};
- bottom: 15%;
+ bottom: 5%;
text-decoration: none; /* 텍스트에 밑줄 제거 */
z-index:2;
`;
diff --git a/src/index.js b/src/index.js
index 6e18f1d..cada659 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,9 +1,9 @@
-import React from 'react';
-import ReactDOM from 'react-dom/client';
-import App from './App';
-import reportWebVitals from './reportWebVitals';
+import React from "react";
+import ReactDOM from "react-dom/client";
+import App from "./App";
+import reportWebVitals from "./reportWebVitals";
-const root = ReactDOM.createRoot(document.getElementById('root'));
+const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
@@ -14,5 +14,3 @@ root.render(
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
-
-
diff --git a/src/pages/donate/done.js b/src/pages/donate/done.js
index 475c4f4..a7d7f0c 100644
--- a/src/pages/donate/done.js
+++ b/src/pages/donate/done.js
@@ -1,45 +1,42 @@
-import React from 'react'
-import styled from '@emotion/styled'
-import { common } from '../../styles/common'
-import backgroundImage from '../../assets/background/background.png'
-import redbox from '../../assets/icon/redbox.png'
-import { css } from '@emotion/react';
-import { Link } from 'react-router-dom'
-import Header from '../../components/Layout/Header'
-import PostBtnMydonate from '../../components/postbtnMydonate'
-import PostBtnMypage from '../../components/postbtnMypage'
-
-
+import React from "react";
+import styled from "@emotion/styled";
+import { common } from "../../styles/common";
+import backgroundImage from "../../assets/background/background.png";
+import redbox from "../../assets/icon/redbox.png";
+import { css } from "@emotion/react";
+import { Link } from "react-router-dom";
+import Header from "../../components/Layout/Header";
+import PostBtnMydonate from "../../components/postbtnMydonate";
+import PostBtnMypage from "../../components/postbtnMypage";
const randomRange = (min, max) => {
-const rand = Math.random();
-return min + Math.floor(rand * (max - min + 1));
+ const rand = Math.random();
+ return min + Math.floor(rand * (max - min + 1));
};
const PostBg = styled.div`
- background: url(${backgroundImage}) no-repeat center center fixed;
- background-size: cover; /* 배경 이미지를 화면에 꽉 채우도록 설정 */
- height: 876px; /* 화면 높이를 860px로 설정 */
- width: 390px;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- cursor: pointer;
- position: relative;
- z-index: 1;
-
+ background: url(${backgroundImage}) no-repeat center center fixed;
+ background-size: cover; /* 배경 이미지를 화면에 꽉 채우도록 설정 */
+ height: 876px; /* 화면 높이를 860px로 설정 */
+ width: 390px;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ cursor: pointer;
+ position: relative;
+ z-index: 1;
`;
const generateRandomStyles = () => {
-const randomX = Math.random() * 100;
-const randomOffset = randomRange(-100, 100);
-const randomXEnd = randomX + randomOffset;
-const randomXEndYoyo = randomX + randomOffset / 2;
-const randomYoyoTime = randomRange(30000, 80000) / 100000;
-const randomYoyoY = randomYoyoTime * 100;
-const randomScale = Math.random();
-const fallDuration = randomRange(10, 30);
-return {
+ const randomX = Math.random() * 100;
+ const randomOffset = randomRange(-100, 100);
+ const randomXEnd = randomX + randomOffset;
+ const randomXEndYoyo = randomX + randomOffset / 2;
+ const randomYoyoTime = randomRange(30000, 80000) / 100000;
+ const randomYoyoY = randomYoyoTime * 100;
+ const randomScale = Math.random();
+ const fallDuration = randomRange(10, 30);
+ return {
randomX,
randomXEnd,
randomXEndYoyo,
@@ -47,200 +44,211 @@ return {
randomYoyoY,
randomScale,
fallDuration,
-};
+ };
};
const StyledParagraph1 = styled.p`
- font-weight: 900;
- font-size: 48px;
- position:fixed;
- color: white;
- z-index:1;
- left:50%;
- transform:translateX(-50%);
- bottom:75%;
- text-align: center;
-
+ font-weight: 900;
+ font-size: 48px;
+ position: fixed;
+ color: white;
+ z-index: 1;
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 75%;
+ text-align: center;
`;
const StyledParagraph2 = styled.p`
- white-space: nowrap;
+ white-space: nowrap;
+ font-weight: 700;
+ font-size: 16px;
+ position: fixed;
+ color: white;
+ bottom: ;
+ z-index: 1;
+
+ @font-face {
+ font-family: "Noto Sans KR";
+ font-style: normal;
+ font-weight: 100;
+ src: url(./font/NotoSansKR-Thin.woff) format("woff"),
+ url(./font/NotoSansKR-Thin.otf) format("opentype");
+ }
+ @font-face {
+ font-family: "Noto Sans KR";
+ font-style: normal;
+ font-weight: 300;
+ src: url(./font/NotoSansKR-Light.woff) format("woff"),
+ url(./font/NotoSansKR-Light.otf) format("opentype");
+ }
+ @font-face {
+ font-family: "Noto Sans KR";
+ font-style: normal;
+ font-weight: 400;
+ src: url(./font/NotoSansKR-Regular.woff) format("woff"),
+ url(./font/NotoSansKR-Regular.otf) format("opentype");
+ }
+ @font-face {
+ font-family: "Noto Sans KR";
+ font-style: normal;
+ font-weight: 500;
+ src: url(../font/NotoSansKR-Medium.woff2) format("woff2"),
+ url(../font/NotoSansKR-Medium.woff) format("woff"),
+ url(../font/NotoSansKR-Medium.otf) format("opentype");
+ }
+ @font-face {
+ font-family: "Noto Sans KR";
+ font-style: normal;
font-weight: 700;
- font-size: 16px;
- position:fixed;
- color: white;
- bottom: ;
- z-index:1;
-
- @font-face {
- font-family: 'Noto Sans KR';
- font-style: normal;
- font-weight: 100;
- src: url(./font/NotoSansKR-Thin.woff) format('woff'),
- url(./font/NotoSansKR-Thin.otf) format('opentype');
- }
- @font-face {
- font-family: 'Noto Sans KR';
- font-style: normal;
- font-weight: 300;
- src: url(./font/NotoSansKR-Light.woff) format('woff'),
- url(./font/NotoSansKR-Light.otf) format('opentype');
- }
- @font-face {
- font-family: 'Noto Sans KR';
- font-style: normal;
- font-weight: 400;
- src: url(./font/NotoSansKR-Regular.woff) format('woff'),
- url(./font/NotoSansKR-Regular.otf) format('opentype');
- }
- @font-face {
- font-family: 'Noto Sans KR';
- font-style: normal;
- font-weight: 500;
- src: url(../font/NotoSansKR-Medium.woff2) format('woff2'),
- url(../font/NotoSansKR-Medium.woff) format('woff'),
- url(../font/NotoSansKR-Medium.otf) format('opentype');
- }
- @font-face {
- font-family: 'Noto Sans KR';
- font-style: normal;
- font-weight: 700;
- src: url(./font/NotoSansKR-Bold.woff) format('woff'),
- url(./font/NotoSansKR-Bold.otf) format('opentype');
- }
- @font-face {
- font-family: 'Noto Sans KR';
- font-style: normal;
- font-weight: 900;
- src: url(./font/NotoSansKR-Black.woff) format('woff'),
- url(./font/NotoSansKR-Black.otf) format('opentype');
- }
- left:50%;
- transform:translateX(-50%);
- bottom:70%;
- text-align: center;
+ src: url(./font/NotoSansKR-Bold.woff) format("woff"),
+ url(./font/NotoSansKR-Bold.otf) format("opentype");
+ }
+ @font-face {
+ font-family: "Noto Sans KR";
+ font-style: normal;
+ font-weight: 900;
+ src: url(./font/NotoSansKR-Black.woff) format("woff"),
+ url(./font/NotoSansKR-Black.otf) format("opentype");
+ }
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 70%;
+ text-align: center;
`;
const StyledParagraph3 = styled.p`
- font-weight: 700;
- font-size: 16px;
- position:fixed;
- color: white;
- bottom:0;
- z-index:1;
- left:50%;
- transform:translateX(-50%);
- bottom:66%;
- text-align: center;
+ font-weight: 700;
+ font-size: 16px;
+ position: fixed;
+ color: white;
+ bottom: 0;
+ z-index: 1;
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 66%;
+ text-align: center;
`;
const StyledParagraph4 = styled.p`
- font-weight: 900;
- font-size: 12px;
- position:fixed;
- color: white;
- z-index:1;
-
- left:50%;
- transform:translateX(-50%);
- bottom:5%;
- text-align: center;
+ font-weight: 900;
+ font-size: 12px;
+ position: fixed;
+ color: white;
+ z-index: 1;
+
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 5%;
+ text-align: center;
`;
const generateSnowflakes = () => {
-const snowflakes = [];
+ const snowflakes = [];
-for (let i = 1; i <= 200; i++) {
+ for (let i = 1; i <= 200; i++) {
const styles = generateRandomStyles();
snowflakes.push({
- id: i,
- styles,
+ id: i,
+ styles,
});
-}
+ }
-return snowflakes;
+ return snowflakes;
};
const Snow = styled.div`
-position: fixed;
-width: 10px;
-height: 10px;
-background: white; // Change the background color to black
-pointer-events: none;
-border-radius: 50%;
-
-${({ id, styles }) => `
+ position: fixed;
+ width: 10px;
+ height: 10px;
+ background: white; // Change the background color to black
+ pointer-events: none;
+ border-radius: 50%;
+
+ ${({ id, styles }) => `
&:nth-child(${id}) {
opacity: ${Math.random()};
- transform: translate(${styles.randomX}vw, -10px) scale(${styles.randomScale});
- animation: fall-${id} ${styles.fallDuration}s -${Math.random() * 30}s linear infinite;
+ transform: translate(${styles.randomX}vw, -10px) scale(${
+ styles.randomScale
+ });
+ animation: fall-${id} ${styles.fallDuration}s -${
+ Math.random() * 30
+ }s linear infinite;
}
@keyframes fall-${id} {
${styles.randomYoyoTime * 100}% {
- transform: translate(${styles.randomXEnd}vw, ${styles.randomYoyoY}vh) scale(${styles.randomScale});
+ transform: translate(${styles.randomXEnd}vw, ${
+ styles.randomYoyoY
+ }vh) scale(${styles.randomScale});
}
to {
- transform: translate(${styles.randomXEndYoyo}vw, 100vh) scale(${styles.randomScale});
+ transform: translate(${styles.randomXEndYoyo}vw, 100vh) scale(${
+ styles.randomScale
+ });
}
}
`}
`;
const StyledLink = styled(Link)`
-position: absolute;
-top: 0;
-left: 0;
-width: 100%;
-height: 100%;
-text-decoration: none;
-color: inherit;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ text-decoration: none;
+ color: inherit;
`;
const BoxImg = styled.div`
- position:fixed;
- bottom:0;
- text-decoration:underline;
- z-index:1;
- p{
- position:absolute;
- left:50%;
- transform:translateX(-50%);
- bottom:10%;
- }
- img{
- width:100%;
- }
+ position: fixed;
+ bottom: 0;
+ text-decoration: underline;
+ z-index: 1;
+ p {
+ position: absolute;
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 10%;
+ }
+ img {
+ width: 100%;
+ }
`;
-
const Hello = () => {
- const snowflakes = generateSnowflakes();
+ const snowflakes = generateSnowflakes();
-
-
- return (
+ return (
<>
-
+
{snowflakes.map((snowflake) => (
-
+
))}
-
+
등록 완료!
- 복지관과 매칭이 완료되면
-
- 등록하신 이메일로
-
- 관련 정보가 발송됩니다.
+ 복지관과 매칭이 완료되면
+
+ 등록하신 전화번호로
+
+ 관련 정보가 발송됩니다.
-
-
+
+
-
+
-
-
+
>
- );
+ );
};
-export default Hello;
\ No newline at end of file
+export default Hello;
diff --git a/src/pages/donate/mydonation.js b/src/pages/donate/mydonation.js
index 8b2345c..c590b79 100644
--- a/src/pages/donate/mydonation.js
+++ b/src/pages/donate/mydonation.js
@@ -1,48 +1,46 @@
-import React from 'react'
-import styled from '@emotion/styled'
-import { common } from '../../styles/common'
-import backgroundImage from '../../assets/background/bgplusemoji.png'
-import redbox from '../../assets/icon/redbox.png'
-import { css } from '@emotion/react';
-import { Link } from 'react-router-dom'
-import Header from '../../components/Layout/Header'
-import PostBtnMydonate from '../../components/postbtnMydonate'
-import PostBtnMypage from '../../components/postbtnMypage'
-
-import ListItem from '../../components/mydonatelist'
-import Book1 from '../../assets/bg/example.png'
-import Book2 from '../../assets/bg/example2.png'
+import React from "react";
+import styled from "@emotion/styled";
+import { common } from "../../styles/common";
+import backgroundImage from "../../assets/background/bgplusemoji.png";
+import redbox from "../../assets/icon/redbox.png";
+import { css } from "@emotion/react";
+import { Link } from "react-router-dom";
+import Header from "../../components/Layout/Header";
+import PostBtnMydonate from "../../components/postbtnMydonate";
+import PostBtnMypage from "../../components/postbtnMypage";
+import ListItem from "../../components/mydonatelist";
+import Book1 from "../../assets/bg/example.png";
+import Book2 from "../../assets/bg/example2.png";
const randomRange = (min, max) => {
-const rand = Math.random();
-return min + Math.floor(rand * (max - min + 1));
+ const rand = Math.random();
+ return min + Math.floor(rand * (max - min + 1));
};
const PostBg = styled.div`
- background: url(${backgroundImage}) no-repeat center center fixed;
- background-size: cover; /* 배경 이미지를 화면에 꽉 채우도록 설정 */
- height: 860px; /* 화면 높이를 860px로 설정 */
- width: 380px;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- cursor: pointer;
- position: relative;
- z-index: 1;
-
+ background: url(${backgroundImage}) no-repeat center center fixed;
+ background-size: cover; /* 배경 이미지를 화면에 꽉 채우도록 설정 */
+ height: 860px; /* 화면 높이를 860px로 설정 */
+ width: 380px;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ cursor: pointer;
+ position: relative;
+ z-index: 1;
`;
const generateRandomStyles = () => {
-const randomX = Math.random() * 100;
-const randomOffset = randomRange(-100, 100);
-const randomXEnd = randomX + randomOffset;
-const randomXEndYoyo = randomX + randomOffset / 2;
-const randomYoyoTime = randomRange(30000, 80000) / 100000;
-const randomYoyoY = randomYoyoTime * 100;
-const randomScale = Math.random();
-const fallDuration = randomRange(10, 30);
-return {
+ const randomX = Math.random() * 100;
+ const randomOffset = randomRange(-100, 100);
+ const randomXEnd = randomX + randomOffset;
+ const randomXEndYoyo = randomX + randomOffset / 2;
+ const randomYoyoTime = randomRange(30000, 80000) / 100000;
+ const randomYoyoY = randomYoyoTime * 100;
+ const randomScale = Math.random();
+ const fallDuration = randomRange(10, 30);
+ return {
randomX,
randomXEnd,
randomXEndYoyo,
@@ -50,216 +48,230 @@ return {
randomYoyoY,
randomScale,
fallDuration,
-};
+ };
};
const StyledParagraph1 = styled.p`
- font-weight: 900;
- font-size: 30px;
- position:fixed;
- color: white;
- z-index:1;
- left:50%;
- transform:translateX(-50%);
- bottom:80%;
- text-align: center;
-
+ font-weight: 900;
+ font-size: 30px;
+ position: fixed;
+ color: white;
+ z-index: 1;
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 80%;
+ text-align: center;
`;
const StyledParagraph2 = styled.p`
- white-space: nowrap;
+ white-space: nowrap;
+ font-weight: 700;
+ font-size: 16px;
+ position: fixed;
+ color: white;
+ z-index: 1;
+
+ @font-face {
+ font-family: "Noto Sans KR";
+ font-style: normal;
+ font-weight: 100;
+ src: url(./font/NotoSansKR-Thin.woff) format("woff"),
+ url(./font/NotoSansKR-Thin.otf) format("opentype");
+ }
+ @font-face {
+ font-family: "Noto Sans KR";
+ font-style: normal;
+ font-weight: 300;
+ src: url(./font/NotoSansKR-Light.woff) format("woff"),
+ url(./font/NotoSansKR-Light.otf) format("opentype");
+ }
+ @font-face {
+ font-family: "Noto Sans KR";
+ font-style: normal;
+ font-weight: 400;
+ src: url(./font/NotoSansKR-Regular.woff) format("woff"),
+ url(./font/NotoSansKR-Regular.otf) format("opentype");
+ }
+ @font-face {
+ font-family: "Noto Sans KR";
+ font-style: normal;
+ font-weight: 500;
+ src: url(../font/NotoSansKR-Medium.woff2) format("woff2"),
+ url(../font/NotoSansKR-Medium.woff) format("woff"),
+ url(../font/NotoSansKR-Medium.otf) format("opentype");
+ }
+ @font-face {
+ font-family: "Noto Sans KR";
+ font-style: normal;
font-weight: 700;
- font-size: 16px;
- position:fixed;
- color: white;
- bottom: ;
- z-index:1;
-
- @font-face {
- font-family: 'Noto Sans KR';
- font-style: normal;
- font-weight: 100;
- src: url(./font/NotoSansKR-Thin.woff) format('woff'),
- url(./font/NotoSansKR-Thin.otf) format('opentype');
- }
- @font-face {
- font-family: 'Noto Sans KR';
- font-style: normal;
- font-weight: 300;
- src: url(./font/NotoSansKR-Light.woff) format('woff'),
- url(./font/NotoSansKR-Light.otf) format('opentype');
- }
- @font-face {
- font-family: 'Noto Sans KR';
- font-style: normal;
- font-weight: 400;
- src: url(./font/NotoSansKR-Regular.woff) format('woff'),
- url(./font/NotoSansKR-Regular.otf) format('opentype');
- }
- @font-face {
- font-family: 'Noto Sans KR';
- font-style: normal;
- font-weight: 500;
- src: url(../font/NotoSansKR-Medium.woff2) format('woff2'),
- url(../font/NotoSansKR-Medium.woff) format('woff'),
- url(../font/NotoSansKR-Medium.otf) format('opentype');
- }
- @font-face {
- font-family: 'Noto Sans KR';
- font-style: normal;
- font-weight: 700;
- src: url(./font/NotoSansKR-Bold.woff) format('woff'),
- url(./font/NotoSansKR-Bold.otf) format('opentype');
- }
- @font-face {
- font-family: 'Noto Sans KR';
- font-style: normal;
- font-weight: 900;
- src: url(./font/NotoSansKR-Black.woff) format('woff'),
- url(./font/NotoSansKR-Black.otf) format('opentype');
- }
- left:50%;
- transform:translateX(-50%);
- bottom:70%;
- text-align: center;
+ src: url(./font/NotoSansKR-Bold.woff) format("woff"),
+ url(./font/NotoSansKR-Bold.otf) format("opentype");
+ }
+ @font-face {
+ font-family: "Noto Sans KR";
+ font-style: normal;
+ font-weight: 900;
+ src: url(./font/NotoSansKR-Black.woff) format("woff"),
+ url(./font/NotoSansKR-Black.otf) format("opentype");
+ }
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 70%;
+ text-align: center;
`;
const StyledParagraph3 = styled.p`
- font-weight: 700;
- font-size: 16px;
- position:fixed;
- color: white;
- bottom:0;
- z-index:1;
- left:50%;
- transform:translateX(-50%);
- bottom:66%;
- text-align: center;
+ font-weight: 700;
+ font-size: 16px;
+ position: fixed;
+ color: white;
+ bottom: 0;
+ z-index: 1;
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 66%;
+ text-align: center;
`;
const StyledParagraph4 = styled.p`
- font-weight: 900;
- font-size: 12px;
- position:fixed;
- color: white;
- z-index:1;
-
- left:50%;
- transform:translateX(-50%);
- bottom:5%;
- text-align: center;
+ font-weight: 900;
+ font-size: 12px;
+ position: fixed;
+ color: white;
+ z-index: 1;
+
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 5%;
+ text-align: center;
`;
const generateSnowflakes = () => {
-const snowflakes = [];
+ const snowflakes = [];
-for (let i = 1; i <= 200; i++) {
+ for (let i = 1; i <= 200; i++) {
const styles = generateRandomStyles();
snowflakes.push({
- id: i,
- styles,
+ id: i,
+ styles,
});
-}
+ }
-return snowflakes;
+ return snowflakes;
};
const Snow = styled.div`
-position: fixed;
-width: 10px;
-height: 10px;
-background: white; // Change the background color to black
-pointer-events: none;
-border-radius: 50%;
+ position: fixed;
+ width: 10px;
+ height: 10px;
+ background: white; // Change the background color to black
+ pointer-events: none;
+ border-radius: 50%;
-${({ id, styles }) => `
+ ${({ id, styles }) => `
&:nth-child(${id}) {
opacity: ${Math.random()};
- transform: translate(${styles.randomX}vw, -10px) scale(${styles.randomScale});
- animation: fall-${id} ${styles.fallDuration}s -${Math.random() * 30}s linear infinite;
+ transform: translate(${styles.randomX}vw, -10px) scale(${
+ styles.randomScale
+ });
+ animation: fall-${id} ${styles.fallDuration}s -${
+ Math.random() * 30
+ }s linear infinite;
}
@keyframes fall-${id} {
${styles.randomYoyoTime * 100}% {
- transform: translate(${styles.randomXEnd}vw, ${styles.randomYoyoY}vh) scale(${styles.randomScale});
+ transform: translate(${styles.randomXEnd}vw, ${
+ styles.randomYoyoY
+ }vh) scale(${styles.randomScale});
}
to {
- transform: translate(${styles.randomXEndYoyo}vw, 100vh) scale(${styles.randomScale});
+ transform: translate(${styles.randomXEndYoyo}vw, 100vh) scale(${
+ styles.randomScale
+ });
}
}
`}
`;
const StyledLink = styled(Link)`
-position: absolute;
-top: 0;
-left: 0;
-width: 100%;
-height: 100%;
-text-decoration: none;
-color: inherit;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ text-decoration: none;
+ color: inherit;
`;
const BoxImg = styled.div`
- position:fixed;
- bottom:0;
- text-decoration:underline;
- z-index:1;
- p{
- position:absolute;
- left:50%;
- transform:translateX(-50%);
- bottom:10%;
- }
- img{
- width:100%;
- }
+ position: fixed;
+ bottom: 0;
+ text-decoration: underline;
+ z-index: 1;
+ p {
+ position: absolute;
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 10%;
+ }
+ img {
+ width: 100%;
+ }
`;
//const ListItem = ({pageTypeNormal, pageTypeDetail, name, school,subject,date,matching, imgSrc}) =>{
const Hello = () => {
- const arrs = [
- {
- name:'쎈 연산 5',
- school:'교과과정 : 초등 ',
- subject:'과목 : 수학',
- date:'등록일자 : 2024. 1. 7 ',
- matching: '매칭상태 : 매칭중' ,
- imgSrc:Book1
- },
- {
- name:'수학의 정석',
- school:'교과과정 : 고등 ',
- subject:'과목 : 수학',
- date:'등록일자 : 2024. 1. 2 ',
- matching: '매칭상태 : 매칭완료' ,
- imgSrc:Book2
- }
-
- ]
- const snowflakes = generateSnowflakes();
+ const arrs = [
+ {
+ name: "쎈 연산 5",
+ school: "교과과정 : 초등 ",
+ subject: "과목 : 수학",
+ date: "등록일자 : 2024. 1. 7 ",
+ matching: "매칭상태 : 매칭중",
+ imgSrc: Book1,
+ },
+ {
+ name: "수학의 정석",
+ school: "교과과정 : 고등 ",
+ subject: "과목 : 수학",
+ date: "등록일자 : 2024. 1. 2 ",
+ matching: "매칭상태 : 매칭완료",
+ imgSrc: Book2,
+ },
+ ];
+ const snowflakes = generateSnowflakes();
-
-
- return (
+ return (
<>
-
+
{snowflakes.map((snowflake) => (
-
+
))}
-
+
나의 기부 현황
- {
- arrs.map((arr, index) => (
-
- ))
- }
+ {arrs.map((arr, index) => (
+
+ ))}
-
-
+
>
- );
+ );
};
-export default Hello;
\ No newline at end of file
+export default Hello;
diff --git a/src/pages/donate/process1.js b/src/pages/donate/process1.js
index 12cbae6..79af077 100644
--- a/src/pages/donate/process1.js
+++ b/src/pages/donate/process1.js
@@ -1,80 +1,71 @@
-import React from 'react'
-import styled from '@emotion/styled'
-import backgroundImage from '../../assets/background/background.png'
-import hello from '../../assets/icon/hello.png'
-import PostBtngo from '../../components/postbtngo'
-import Header from '../../components/Layout/Header'
+import React from "react";
+import styled from "@emotion/styled";
+import backgroundImage from "../../assets/background/background.png";
+import hello from "../../assets/icon/hello.png";
+import PostBtngo from "../../components/postbtngo";
+import Header from "../../components/Layout/Header";
const StyledParagraph1 = styled.p`
- font-weight: 900;
- font-size: 30px;
- position:fixed;
- color: black;
- z-index:1;
- left:50%;
- white-space: nowrap;
- transform:translateX(-50%);
- bottom:75%;
- text-align: center;
-
+ font-weight: 900;
+ font-size: 30px;
+ position: fixed;
+ color: black;
+ z-index: 1;
+ left: 50%;
+ white-space: nowrap;
+ transform: translateX(-50%);
+ bottom: 75%;
+ text-align: center;
`;
const StyledParagraph2 = styled.p`
- white-space: nowrap;
- font-weight: 900;
- font-size: 30px;
- position:fixed;
- color: black;
- z-index:1;
- left:50%;
- transform:translateX(-50%);
- bottom:30%;
- text-align: center;
-
+ white-space: nowrap;
+ font-weight: 900;
+ font-size: 30px;
+ position: fixed;
+ color: black;
+ z-index: 1;
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 30%;
+ text-align: center;
`;
const PostBg = styled.div`
- background: url(${backgroundImage}) no-repeat center center fixed;
- background-size: cover; /* 배경 이미지를 화면에 꽉 채우도록 설정 */
- height: 876px; /* 화면 높이를 860px로 설정 */
- width: 390px;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- cursor: pointer;
- position: relative;
- z-index: 0;
-
+ background: url(${backgroundImage}) no-repeat center center fixed;
+ background-size: cover; /* 배경 이미지를 화면에 꽉 채우도록 설정 */
+ height: 876px; /* 화면 높이를 860px로 설정 */
+ width: 390px;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ cursor: pointer;
+ position: relative;
+ z-index: 0;
`;
-
-
const BoxImg = styled.div`
- position:fixed;
- z-index:2;
- position:absolute;
- left:40%;
- transform:translateX(-50%);
- bottom:45%;
-
+ position: fixed;
+ z-index: 2;
+ position: absolute;
+ left: 40%;
+ transform: translateX(-50%);
+ bottom: 45%;
`;
-const Hello = () => {
-
-
-return (
- <>
-
- 안녕하세요.
-
-
-
-
- 남경현님
-
- 만나서 반갑습니다!
-
-
+const Process1 = () => {
+ return (
+ <>
+
+ 안녕하세요.
+
+
+
+
+ 남경현님
+
+ 만나서 반갑습니다!
+
+
>
-
-);
+ );
};
-export default Hello;
+export default Process1;
diff --git a/src/pages/donate/process2.js b/src/pages/donate/process2.js
index c3b74c9..c4006c5 100644
--- a/src/pages/donate/process2.js
+++ b/src/pages/donate/process2.js
@@ -1,84 +1,98 @@
-import React, { useState } from 'react';
-import styled from '@emotion/styled';
-import PostBtngo from '../../components/postbtngo';
-import Header from '../../components/Layout/Header';
-import { common } from '../../styles/common';
+import React, { useState } from "react";
+import styled from "@emotion/styled";
+import PostBtngo from "../../components/postbtngo";
+import Header from "../../components/Layout/Header";
+import { QueryClient, QueryClientProvider } from "react-query";
const StyledParagraph1 = styled.p`
-font-weight: 900;
-font-size: 30px;
-position: fixed;
-color: black;
-z-index: 1;
-left: 50%;
-transform: translateX(-50%);
-bottom: 65%;
-text-align: center;
+ font-weight: 900;
+ font-size: 30px;
+ position: fixed;
+ color: black;
+ z-index: 1;
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 65%;
+ text-align: center;
`;
-const EditableButton = styled.button`
-display: block;
-width: 320px;
-color: ${common.colors.black};
-font-weight: 700;
-font-size: ${common.fontSize.fz20};
-border-radius: 10px;
-border: 2px solid ${common.colors.black};
-cursor: pointer;
-text-decoration: none;
-background: none;
-position: absolute;
-overflow: hidden; /* Hide overflowing content */
+const Textboxdesign = styled.input`
+ position: fixed;
+ color: black;
+ z-index: 1;
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 30%;
+ text-align: center;
+ font-size: 16px;
+ padding: 10px;
+ width: 80%;
`;
-const EditableContent = styled.div`
-outline: none;
-width: 100%;
-height: 100%;
-padding: 10px;
-white-space: nowrap;
-overflow: hidden;
-text-overflow: ellipsis; /* Show ellipsis (...) for overflow */
+const Textboxdesign1 = styled.input`
+ position: fixed;
+ color: black;
+ z-index: 1;
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 20%;
+ text-align: center;
+ font-size: 16px;
+ padding: 10px;
+ width: 80%;
`;
const StyledParagraph3 = styled.p`
-font-weight: 900;
-font-size: 28px;
-position: fixed;
-color: white;
-bottom: 0;
-z-index: 1;
-left: 10%;
-transform: translateX(-50%);
-bottom: 55%;
-text-align: center;
+ font-weight: 900;
+ font-size: 28px;
+ position: fixed;
+ color: white;
+ bottom: 0;
+ z-index: 1;
+ left: 10%;
+ transform: translateX(-50%);
+ bottom: 55%;
+ text-align: center;
`;
-const Hello = () => {
-const [editableText, setEditableText] = useState('오. 텍스트박스 안되네');
+const queryClient = new QueryClient();
-const handleTextChange = (event) => {
- setEditableText(event.target.textContent);
-};
-
-return (
+const Process2 = () => {
+ const [publisher, setPublisher] = useState("");
+ const [bookName, setBookName] = useState("");
+ return (
<>
-
-
- 출판사의 이름과
-
- 참고서의 이름을
-
- 등록해주세요.
-
-
-
- {editableText}
-
-
-
+
+
+
+ 출판사의 이름과
+
+ 참고서의 이름을
+
+ 등록해주세요.
+
+
+
+ setPublisher(e.target.value)}
+ />
+ setBookName(e.target.value)}
+ />
+
+
+ {/* */}
+
>
-);
+ );
};
-export default Hello;
+export default Process2;
diff --git a/src/pages/donate/process3.js b/src/pages/donate/process3.js
index 8e16caf..a7a8f95 100644
--- a/src/pages/donate/process3.js
+++ b/src/pages/donate/process3.js
@@ -1,107 +1,117 @@
-import React, { useState } from 'react';
-import styled from '@emotion/styled';
-import PostBtngo from '../../components/postbtngo';
-import Header from '../../components/Layout/Header';
-import { common } from '../../styles/common';
+import React, { useState } from "react";
+import styled from "@emotion/styled";
+import PostBtngo from "../../components/postbtngo";
+import Header from "../../components/Layout/Header";
+import { common } from "../../styles/common";
const StyledParagraph1 = styled.p`
-font-weight: 900;
-font-size: 30px;
-position: fixed;
-white-space: nowrap;
-color: black;
-z-index: 1;
-left: 50%;
-transform: translateX(-50%);
-bottom: 75%;
-text-align: center;
+ font-weight: 900;
+ font-size: 30px;
+ position: fixed;
+ white-space: nowrap;
+ color: black;
+ z-index: 1;
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 75%;
+ text-align: center;
`;
const StyledParagraph3 = styled.p`
-font-weight: 900;
-font-size: 28px;
-position: fixed;
-color: white;
-bottom: 0;
-z-index: 1;
-left: 10%;
-transform: translateX(-50%);
-bottom: 60%;
-text-align: center;
+ font-weight: 900;
+ font-size: 28px;
+ position: fixed;
+ color: white;
+ bottom: 0;
+ z-index: 1;
+ left: 10%;
+ transform: translateX(-50%);
+ bottom: 60%;
+ text-align: center;
`;
const StyledParagraph4 = styled.p`
-font-weight: 900;
-font-size: 28px;
-position: fixed;
-color: white;
-bottom: 0;
-z-index: 1;
-left: 10%;
-transform: translateX(-50%);
-bottom: 50%;
-text-align: center;
+ font-weight: 900;
+ font-size: 28px;
+ position: fixed;
+ color: white;
+ bottom: 0;
+ z-index: 1;
+ left: 10%;
+ transform: translateX(-50%);
+ bottom: 50%;
+ text-align: center;
`;
const StyledParagraph5 = styled.p`
-font-weight: 900;
-font-size: 28px;
-position: fixed;
-color: white;
-bottom: 0;
-z-index: 1;
-left: 10%;
-transform: translateX(-50%);
-bottom: 40%;
-text-align: center;
+ font-weight: 900;
+ font-size: 28px;
+ position: fixed;
+ color: white;
+ bottom: 0;
+ z-index: 1;
+ left: 10%;
+ transform: translateX(-50%);
+ bottom: 40%;
+ text-align: center;
`;
const EditableButton = styled.button`
-display: block;
-width: 320px;
-color: ${common.colors.black};
-font-weight: 700;
-font-size: ${common.fontSize.fz20};
-border-radius: 20px;
-border: 2px solid ${common.colors.black};
-cursor: pointer;
-background: ${(props) => (props.isSelected ? common.colors.blue : 'none')}; /* Dynamic background based on isSelected */
-position: absolute;
-bottom: 5%;
-height: 60px;
+ display: block;
+ width: 320px;
+ color: ${common.colors.black};
+ font-weight: 700;
+ font-size: ${common.fontSize.fz20};
+ border-radius: 20px;
+ border: 2px solid ${common.colors.black};
+ cursor: pointer;
+ background: ${(props) =>
+ props.isSelected
+ ? common.colors.blue
+ : "none"}; /* Dynamic background based on isSelected */
+ position: absolute;
+ bottom: 5%;
+ height: 60px;
`;
-
-const Hello = () => {
-
- const [selectedButton, setSelectedButton] = useState(null);
-
- const handleButtonClick = (buttonName) => {
- setSelectedButton(buttonName);
- };
-return (
+const Process3 = () => {
+ const [selectedButton, setSelectedButton] = useState(null);
+ // onChange={(e) => setInfo({ ...info, category: e.target.value })}
+ const handleButtonClick = (buttonName) => {
+ setSelectedButton(buttonName);
+ };
+ return (
<>
-
-
- 책이 어느 교과과정에
+
+
+ 책이 어느 교과과정에
해당하나요?
-
-
- handleButtonClick('초등교육')}>
- 초등교육
-
-
-
- handleButtonClick('중등교육')}>
- 중등교육
-
-
-
- handleButtonClick('고등교육')}>
- 고등교육
-
-
+
+
+ handleButtonClick("초등교육")}
+ >
+ 초등교육
+
+
+
+ handleButtonClick("중등교육")}
+ >
+ 중등교육
+
+
+
+ handleButtonClick("고등교육")}
+ >
+ 고등교육
+
+
-
+
>
-);
+ );
};
-export default Hello;
+export default Process3;
diff --git a/src/pages/donate/process4.js b/src/pages/donate/process4.js
index 6778f67..1f91c6b 100644
--- a/src/pages/donate/process4.js
+++ b/src/pages/donate/process4.js
@@ -37,7 +37,7 @@ bottom: 0;
z-index: 1;
left: 10%;
transform: translateX(-50%);
-bottom: 64%;
+bottom: 63%;
text-align: center;
`;
const StyledParagraph5 = styled.p`
@@ -49,7 +49,7 @@ bottom: 0;
z-index: 1;
left: 10%;
transform: translateX(-50%);
-bottom: 57%;
+bottom: 55%;
text-align: center;
`;
const StyledParagraph6 = styled.p`
@@ -61,7 +61,7 @@ bottom: 0;
z-index: 1;
left: 10%;
transform: translateX(-50%);
-bottom: 50%;
+bottom: 47%;
text-align: center;
`;
const StyledParagraph7 = styled.p`
@@ -73,7 +73,7 @@ bottom: 0;
z-index: 1;
left: 10%;
transform: translateX(-50%);
-bottom: 43%;
+bottom: 39%;
text-align: center;
`;
const StyledParagraph8 = styled.p`
@@ -85,7 +85,7 @@ bottom: 0;
z-index: 1;
left: 10%;
transform: translateX(-50%);
-bottom: 36%;
+bottom: 31%;
text-align: center;
`;
@@ -98,7 +98,7 @@ bottom: 0;
z-index: 1;
left: 10%;
transform: translateX(-50%);
-bottom: 29%;
+bottom: 23%;
text-align: center;
`;
const EditableButton = styled.button`
diff --git a/src/pages/donate/process5.js b/src/pages/donate/process5.js
index 7de4225..08f89b0 100644
--- a/src/pages/donate/process5.js
+++ b/src/pages/donate/process5.js
@@ -3,16 +3,31 @@ import styled from '@emotion/styled';
import PostBtngo from '../../components/postbtngo';
import Header from '../../components/Layout/Header';
-const checkBoxList = ['밑줄 (연필/샤프)', '밑줄 (볼펜/형광펜)', '필기 (연필/샤프)', '필기 (볼펜/형광펜)', '겉표지 깨끗함', '이름(서명) 없음', '페이지 변색 없음', '페이지 훼손 없음'];
+const checkBoxList = [
+'매우 깨끗함',
+'깨끗함',
+'보통',
+'필기 있음',
+'필기량 많음',
+'연필/샤프',
+'볼펜/형광펜/색연필',
+'겉표지 깨끗함',
+'이름(서명) 없음',
+'페이지 변색 없음',
+'페이지 훼손 없음'
+];
const CheckboxContainer = styled.div`
-margin: 160px auto 20px;
-text-align: center;
+margin: 120px auto 20px;
+text-align: center;
+margin-bottom: 55px; /* Adjusted margin */
+bottom: 45%;
`;
const CheckboxItem = styled.div`
-margin-bottom: 30px;
-text-align: auto;
+margin-bottom: 20px;
+text-align: auto;
+bottom: 85%;
`;
const CheckboxLabel = styled.label`
@@ -20,6 +35,7 @@ display: block;
font-size: 18px; /* Example font size */
color: #333; /* Example color */
margin-bottom: 10px; /* Example margin-bottom */
+bottom: 85%;
`;
const StyledParagraph0 = styled.p`
@@ -31,9 +47,10 @@ color: black;
z-index: 1;
left: 50%;
transform: translateX(-50%);
-bottom: 77%;
+bottom: 80%;
text-align: center;
`;
+
const StyledParagraph1 = styled.p`
font-weight: 900;
font-size: 25px;
@@ -43,54 +60,98 @@ color: black;
z-index: 1;
left: 50%;
transform: translateX(-50%);
-bottom: 47%;
+bottom: 49%;
text-align: center;
`;
+
+const StyledParagraph2 = styled.p`
+font-weight: 900;
+font-size: 25px;
+position: fixed;
+white-space: nowrap;
+color: black;
+z-index: 1;
+left: 50%;
+transform: translateX(-50%);
+bottom: 32%;
+text-align: center;
+`;
+
const Hello = () => {
const [checkedItems, setCheckedItems] = useState({});
-const handleCheckboxChange = (itemName) => {
- setCheckedItems((prevItems) => ({
- ...prevItems,
- [itemName]: !prevItems[itemName],
- }));
+const handleCheckboxChange = (itemName, section) => {
+ const newCheckedItems = { ...checkedItems };
+
+ if (section === '어느정도') {
+ // For the first section, allow only one checkbox to be checked
+ newCheckedItems['어느정도'] = itemName;
+ } else {
+ // For other sections, allow multiple checkboxes to be checked
+ newCheckedItems[section] = newCheckedItems[section] || [];
+ const index = newCheckedItems[section].indexOf(itemName);
+
+ if (index === -1) {
+ // If not checked, add to the array
+ newCheckedItems[section].push(itemName);
+ } else {
+ // If checked, remove from the array
+ newCheckedItems[section].splice(index, 1);
+ }
+ }
+
+ setCheckedItems(newCheckedItems);
};
return (
<>
-
- 필기한 흔적이 있나요?
-
+ 어느정도 필기하셨나요?
- {checkBoxList.slice(0, 4).map((item) => (
+ {checkBoxList.slice(0, 5).map((item) => (
handleCheckboxChange(item)}
+ checked={checkedItems['어느정도'] === item}
+ onChange={() => handleCheckboxChange(item, '어느정도')}
/>
{item}
))}
-
- 보존 상태는 어떤가요?
-
-
-
-
+ 무엇으로 필기하셨나요?
+
+
+
+
+ {checkBoxList.slice(5, 7).map((item) => (
+
+
+ handleCheckboxChange(item, '무엇으로')}
+ />
+ {item}
+
+
+ ))}
+
+ 책의 상태는 어떤가요?
+
+
+
- {checkBoxList.slice(4).map((item) => (
+ {checkBoxList.slice(7).map((item) => (
handleCheckboxChange(item)}
+ checked={checkedItems['책의 상태'] && checkedItems['책의 상태'].includes(item)}
+ onChange={() => handleCheckboxChange(item, '책의 상태')}
/>
{item}
diff --git a/src/pages/main/check.js b/src/pages/main/check.js
index f659983..e7fa76e 100644
--- a/src/pages/main/check.js
+++ b/src/pages/main/check.js
@@ -252,7 +252,7 @@ return (
기부할 참고서는 훼손의 정도가 심하지 않아야 합니다.
- ex : 찢어짐, 파손됨
+ ex : 찢어짐, 파손됨 !
diff --git a/src/pages/main/choose.js b/src/pages/main/choose.js
index fbd580e..b0559d9 100644
--- a/src/pages/main/choose.js
+++ b/src/pages/main/choose.js
@@ -1,39 +1,38 @@
-import React from 'react'
-import styled from '@emotion/styled'
-import backgroundImage from '../../assets/background/background.png'
-import donate3d from '../../assets/icon/donate3d.png'
-import PostBtn from '../../components/postbtn'
-import PostBtn1 from '../../components/postbtn1'
-import Header from '../../components/Layout/Header'
+import React from "react";
+import styled from "@emotion/styled";
+import backgroundImage from "../../assets/background/background.png";
+import donate3d from "../../assets/icon/donate3d.png";
+import PostBtn from "../../components/postbtn";
+import PostBtn1 from "../../components/postbtn1";
+import Header from "../../components/Layout/Header";
const randomRange = (min, max) => {
-const rand = Math.random();
-return min + Math.floor(rand * (max - min + 1));
+ const rand = Math.random();
+ return min + Math.floor(rand * (max - min + 1));
};
const PostBg = styled.div`
- background: url(${backgroundImage}) no-repeat center center fixed;
- background-size: cover; /* 배경 이미지를 화면에 꽉 채우도록 설정 */
- height: 876px; /* 화면 높이를 860px로 설정 */
- width: 390px;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- cursor: pointer;
- position: relative;
- z-index: 0;
-
+ background: url(${backgroundImage}) no-repeat center center fixed;
+ background-size: cover; /* 배경 이미지를 화면에 꽉 채우도록 설정 */
+ height: 876px; /* 화면 높이를 860px로 설정 */
+ width: 390px;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ cursor: pointer;
+ position: relative;
+ z-index: 0;
`;
const generateRandomStyles = () => {
-const randomX = Math.random() * 100;
-const randomOffset = randomRange(-100, 100);
-const randomXEnd = randomX + randomOffset;
-const randomXEndYoyo = randomX + randomOffset / 2;
-const randomYoyoTime = randomRange(30000, 80000) / 100000;
-const randomYoyoY = randomYoyoTime * 100;
-const randomScale = Math.random();
-const fallDuration = randomRange(10, 30);
-return {
+ const randomX = Math.random() * 100;
+ const randomOffset = randomRange(-100, 100);
+ const randomXEnd = randomX + randomOffset;
+ const randomXEndYoyo = randomX + randomOffset / 2;
+ const randomYoyoTime = randomRange(30000, 80000) / 100000;
+ const randomYoyoY = randomYoyoTime * 100;
+ const randomScale = Math.random();
+ const fallDuration = randomRange(10, 30);
+ return {
randomX,
randomXEnd,
randomXEndYoyo,
@@ -41,84 +40,93 @@ return {
randomYoyoY,
randomScale,
fallDuration,
+ };
};
-};
-
const generateSnowflakes = () => {
-const snowflakes = [];
+ const snowflakes = [];
-for (let i = 1; i <= 200; i++) {
+ for (let i = 1; i <= 200; i++) {
const styles = generateRandomStyles();
snowflakes.push({
- id: i,
- styles,
+ id: i,
+ styles,
});
-}
+ }
-return snowflakes;
+ return snowflakes;
};
const Snow = styled.div`
-position: fixed;
-width: 10px;
-height: 10px;
-background: white; // Change the background color to black
-pointer-events: none;
-border-radius: 50%;
-
-${({ id, styles }) => `
+ position: fixed;
+ width: 10px;
+ height: 10px;
+ background: white; // Change the background color to black
+ pointer-events: none;
+ border-radius: 50%;
+
+ ${({ id, styles }) => `
&:nth-child(${id}) {
opacity: ${Math.random()};
- transform: translate(${styles.randomX}vw, -10px) scale(${styles.randomScale});
- animation: fall-${id} ${styles.fallDuration}s -${Math.random() * 30}s linear infinite;
+ transform: translate(${styles.randomX}vw, -10px) scale(${
+ styles.randomScale
+ });
+ animation: fall-${id} ${styles.fallDuration}s -${
+ Math.random() * 30
+ }s linear infinite;
}
@keyframes fall-${id} {
${styles.randomYoyoTime * 100}% {
- transform: translate(${styles.randomXEnd}vw, ${styles.randomYoyoY}vh) scale(${styles.randomScale});
+ transform: translate(${styles.randomXEnd}vw, ${
+ styles.randomYoyoY
+ }vh) scale(${styles.randomScale});
}
to {
- transform: translate(${styles.randomXEndYoyo}vw, 100vh) scale(${styles.randomScale});
+ transform: translate(${styles.randomXEndYoyo}vw, 100vh) scale(${
+ styles.randomScale
+ });
}
}
`}
`;
-
-
const BoxImg = styled.div`
- position:fixed;
- z-index:2;
- position:absolute;
- left:50%;
- transform:translateX(-50%);
- bottom:30%;
-
+ position: fixed;
+ z-index: 2;
+ position: absolute;
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 30%;
`;
const Hello = () => {
-const snowflakes = generateSnowflakes();
-
-
-return (
- <>
-
- {snowflakes.map((snowflake) => (
-
- ))}
+ const snowflakes = generateSnowflakes();
+
+ return (
+ <>
+
+ {snowflakes.map((snowflake) => (
+
+ ))}
-
+
-
-
+
-
-
+
+
>
-
-);
+ );
};
export default Hello;
diff --git a/src/pages/main/userlogin.js b/src/pages/main/userlogin.js
new file mode 100644
index 0000000..f9b3960
--- /dev/null
+++ b/src/pages/main/userlogin.js
@@ -0,0 +1,63 @@
+import React, { useState } from "react";
+import { Route } from "react-router-dom";
+import { Link } from "react-router-dom";
+import { useNavigate } from "react-router-dom";
+import axios from "axios";
+import "../../styles/agencylogin.css";
+import Header from '../../components/Layout/Header'
+
+const AgencyLogin = () => {
+const navigate = useNavigate();
+const [id, setId] = useState("");
+const [password, setPassword] = useState("");
+
+const handleSignIn = async () => {
+ try {
+ const response = await axios.post("/login", {
+ id,
+ password,
+ });
+ navigate("/reciever/booklist");
+ } catch (error) {
+ console.log(error);
+ }
+};
+
+return (
+
+
+
+
+
BookBridge
+
나의 시작이 될 수 있게
+
+
+ setId(e.target.value)}
+ placeholder="id"
+ className="input-field"
+ />
+ setPassword(e.target.value)}
+ placeholder="Password"
+ className="input-field"
+ />
+
+
+
+
+
+
+
+
+
+);
+};
+
+export default AgencyLogin;
diff --git a/src/pages/main/usersignup.js b/src/pages/main/usersignup.js
new file mode 100644
index 0000000..335932c
--- /dev/null
+++ b/src/pages/main/usersignup.js
@@ -0,0 +1,98 @@
+import React, { useState } from "react";
+import axios from "axios";
+import Header from "../../components/Layout/Header";
+import InputField from "../../components/InputField";
+import backgroundImage from "../../assets/background/background.png";
+import { useNavigate } from "react-router-dom";
+import "../../styles/agencysignup.css";
+
+const AgencySignUp = () => {
+ const [email, setEmail] = useState("");
+ const [id, setId] = useState("");
+ const [password, setPassword] = useState("");
+ const [checkPassword, setCheckPassword] = useState("");
+ const [name, setName] = useState("");
+ const navigate = useNavigate();
+
+ const handleSubmit = async (e) => {
+ e.preventDefault();
+
+ if (!email || !id || !password || !checkPassword || !name) {
+ alert("모든 필드를 채워주세요.");
+ return;
+ }
+
+ if (password !== checkPassword) {
+ alert("비밀번호가 일치하지 않습니다.");
+ return;
+ }
+
+ const formData = {
+ email: email,
+ id: id,
+ password: password,
+ check_password: checkPassword,
+ name: name,
+ };
+
+ try {
+ const response = await axios.post("/signup", formData);
+ console.log(response.data);
+ navigate("/reciever/agencylogin");
+ } catch (error) {
+ console.error("회원가입 오류:", error);
+ }
+ };
+
+ return (
+
+
+
+
회원가입
+
회원이 되어 기부를 경험해보세요.
+
+
+
+ );
+};
+
+export default AgencySignUp;
diff --git a/src/pages/reciever/agencylogin.js b/src/pages/reciever/agencylogin.js
new file mode 100644
index 0000000..75471d4
--- /dev/null
+++ b/src/pages/reciever/agencylogin.js
@@ -0,0 +1,60 @@
+import React, { useState } from "react";
+import { Route } from "react-router-dom";
+import { Link } from "react-router-dom";
+import { useNavigate } from "react-router-dom";
+import axios from "axios";
+import Header from "../../components/Layout/Header";
+import "../../styles/agencylogin.css";
+
+const AgencyLogin = () => {
+ const navigate = useNavigate();
+ const [id, setId] = useState("");
+ const [password, setPassword] = useState("");
+
+ // const handleSignIn = async () => {
+ // try {
+ // const response = await axios.post("/login", {
+ // login_id: id,
+ // password: password,
+ // });
+ // navigate("/reciever/booklist");
+ // } catch (error) {
+ // console.error(error);
+ // }
+ // };
+
+ return (
+
+
+
+
BookBridge
+
나의 시작이 될 수 있게
+
+
+ setId(e.target.value)}
+ placeholder="id"
+ className="input-field"
+ />
+ setPassword(e.target.value)}
+ placeholder="Password"
+ className="input-field"
+ />
+ {/*
+
+ );
+};
+
+export default AgencyLogin;
diff --git a/src/pages/reciever/agencysignup.js b/src/pages/reciever/agencysignup.js
new file mode 100644
index 0000000..eb8b2f9
--- /dev/null
+++ b/src/pages/reciever/agencysignup.js
@@ -0,0 +1,109 @@
+import React, { useState } from "react";
+import axios from "axios";
+import Header from "../../components/Layout/Header";
+import InputField from "../../components/InputField";
+import backgroundImage from "../../assets/background/background.png";
+import { useNavigate } from "react-router-dom";
+
+import "../../styles/agencysignup.css";
+
+const AgencySignUp = () => {
+ const [regNum, setRegNum] = useState("");
+ const [email, setEmail] = useState("");
+ const [id, setId] = useState("");
+ const [password, setPassword] = useState("");
+ const [checkPassword, setCheckPassword] = useState("");
+ const [name, setName] = useState("");
+ const navigate = useNavigate();
+
+ const handleSubmit = async (e) => {
+ e.preventDefault();
+
+ if (!email || !id || !password || !checkPassword || !name || !regNum) {
+ alert("모든 필드를 채워주세요.");
+ return;
+ }
+
+ if (password !== checkPassword) {
+ alert("비밀번호가 일치하지 않습니다.");
+ return;
+ }
+
+ // const formData = {
+ // email: email,
+ // login_id: id,
+ // password: password,
+ // check_password: checkPassword,
+ // name: name,
+ // registration_number: regNum,
+ // };
+
+ // try {
+ // const response = await axios.post("/signup", formData);
+ // console.log(response.data);
+ // navigate("/reciever/agencylogin");
+ // } catch (error) {
+ // console.error("회원가입 오류:", error);
+ // }
+ navigate("/reciever/agencylogin");
+ };
+
+ return (
+
+
+
+
복지관 회원가입
+
인증을 통해 참고서를 지원받으세요
+
+
+
+ );
+};
+
+export default AgencySignUp;
diff --git a/src/pages/reciever/bookinfo.js b/src/pages/reciever/bookinfo.js
new file mode 100644
index 0000000..8de379e
--- /dev/null
+++ b/src/pages/reciever/bookinfo.js
@@ -0,0 +1,58 @@
+import React, { useState, useEffect } from "react";
+import { useLocation } from "react-router-dom";
+import axios from "axios";
+import queryString from "query-string";
+import { Link } from "react-router-dom";
+import Header from "../../components/Layout/Header";
+import "../../styles/bookinfo.css";
+
+const BookInfo = () => {
+ const location = useLocation();
+ const { title, curriculum, subject, publisher, outsideImageUrl } =
+ location.state || {};
+ return (
+
+
+
정보 세부보기
+
+
+
+ {title} / {subject}
+
+
+
+
+
+ 교과 과정 |
+ {curriculum} |
+
+
+ 출판사 |
+ {publisher} |
+
+
+ 필기 도구 |
+ 연필/샤프 |
+
+
+ 필기 상태 |
+ 깨끗함 |
+
+
+ 보존 상태 |
+ 겉표지 깨끗함 |
+
+
+
+
+
+
+
+ 신청하기
+
+
+
+ );
+};
+
+export default BookInfo;
diff --git a/src/pages/reciever/booklist.js b/src/pages/reciever/booklist.js
new file mode 100644
index 0000000..7a2ccc2
--- /dev/null
+++ b/src/pages/reciever/booklist.js
@@ -0,0 +1,122 @@
+import React, { useState, useEffect } from "react";
+import BookStatus from "../../components/BookStatus";
+import axios from "axios";
+import Header from "../../components/Layout/Header";
+import "../../styles/booklist.css";
+
+const BookList = () => {
+ const [allBooks, setAllBooks] = useState([
+ {
+ outsideImageUrl: "/example1.png",
+ title: "쎈",
+ subject: "수학",
+ curriculum: "초등",
+ publisher: "한빛출판사",
+ },
+ {
+ bookId: 9,
+ outsideImageUrl: "/example2.jpg",
+ title: "하이탑",
+ subject: "과학",
+ curriculum: "중등",
+ publisher: "하이탑출판사",
+ },
+ {
+ bookId: 8,
+ outsideImageUrl: "/example3.jpg",
+ title: "국치독",
+ subject: "국어",
+ curriculum: "고등",
+ publisher: "유대종출판사",
+ },
+ {
+ bookId: 7,
+ outsideImageUrl: "/example4.jpg",
+ title: "경선식영단어",
+ subject: "영어",
+ curriculum: "고등",
+ publisher: "한빛출판사",
+ },
+ {
+ bookId: 6,
+ outsideImageUrl: "/example5.jpg",
+ title: "삼국지",
+ subject: "한국사",
+ curriculum: "초등",
+ publisher: "중국출판사",
+ },
+ ]);
+ const [books, setBooks] = useState([]);
+ const [curriculum, setCurriculum] = useState("모든 교육 과정");
+ const [subject, setSubject] = useState("모든 과목");
+
+ useEffect(() => {
+ // 전체 책 목록에서 필터링
+ let filteredBooks = allBooks;
+ if (curriculum !== "모든 교육 과정") {
+ filteredBooks = filteredBooks.filter(
+ (book) => book.curriculum === curriculum
+ );
+ }
+ if (subject !== "모든 과목") {
+ filteredBooks = filteredBooks.filter((book) => book.subject === subject);
+ }
+
+ setBooks(filteredBooks);
+ }, [curriculum, subject]); // curriculum과 subject가 바뀔 때마다 실행
+
+ const handleCurriculumChange = (event) => {
+ setCurriculum(event.target.value);
+ };
+
+ const handleSubjectChange = (event) => {
+ setSubject(event.target.value);
+ };
+
+ return (
+
+
+
목록
+
+
+
+
+
+ {books.map((book) => (
+
+ ))}
+
+
+ );
+};
+
+export default BookList;
diff --git a/src/pages/reciever/finish.js b/src/pages/reciever/finish.js
new file mode 100644
index 0000000..63b3199
--- /dev/null
+++ b/src/pages/reciever/finish.js
@@ -0,0 +1,20 @@
+import { Link } from "react-router-dom";
+import "../../styles/finish.css";
+import giftBoxImg from "../../assets/giftbox_blue.png";
+
+const Finish = () => {
+ return (
+
+
신청 완료!
+
+ 사용자에게 메일로 정보가 발송됩니다.
+
+
+
목록으로
+
+
+
+ );
+};
+
+export default Finish;
diff --git a/src/pages/reciever/searchbooklist.js b/src/pages/reciever/searchbooklist.js
new file mode 100644
index 0000000..0c487bf
--- /dev/null
+++ b/src/pages/reciever/searchbooklist.js
@@ -0,0 +1,32 @@
+import React from "react";
+import { useLocation } from "react-router-dom";
+import Header from "../../components/Layout/Header";
+import BookStatus from "../../components/BookStatus";
+
+const SearchBookList = () => {
+ const location = useLocation();
+ const books = location.state?.books;
+ return (
+
+
+
목록
+ {books.map((book) => (
+
+ ))}
+
+
+
+
+
+
+ );
+};
+
+export default SearchBookList;
diff --git a/src/pages/reciever/searchbooks.js b/src/pages/reciever/searchbooks.js
new file mode 100644
index 0000000..113b686
--- /dev/null
+++ b/src/pages/reciever/searchbooks.js
@@ -0,0 +1,48 @@
+import { useState } from "react";
+import "../../components/InputField2";
+import InputField2 from "../../components/InputField2";
+import "../../components/Layout/Header";
+import Header from "../../components/Layout/Header";
+import { Navigate, useNavigate } from "react-router";
+import axios from "axios";
+
+const SearchBooks = () => {
+ const navigate = useNavigate;
+ const [publisher, setPublisher] = useState("");
+ const [title, setTitle] = useState("");
+ const handleSubmit = async (e) => {
+ e.preventDefault();
+
+ try {
+ const response = await axios.get(
+ `/book?title=${title}&publisher=${publisher}`
+ );
+ const books = response.data;
+ navigate("/reciever/searchbooklist", { state: { books } });
+ } catch (error) {
+ console.error("불러올 수 없음 :", error);
+ }
+ };
+ return (
+
+
+
+
+ );
+};
+
+export default SearchBooks;
diff --git a/src/styles/agencylogin.css b/src/styles/agencylogin.css
new file mode 100644
index 0000000..d5489bf
--- /dev/null
+++ b/src/styles/agencylogin.css
@@ -0,0 +1,60 @@
+.login-container {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+
+ height: 100vh;
+ background-color: #fff;
+}
+
+.header-login {
+ margin-top: 100px;
+ text-align: center;
+ padding-bottom: 40px;
+}
+
+.title {
+ color: #000;
+ text-align: center;
+ font-family: Noto Sans KR;
+ font-size: 48px;
+ font-style: normal;
+ font-weight: 900;
+}
+
+.subtitle {
+ color: #000;
+ font-family: Noto Sans KR;
+ font-size: 16px;
+ font-style: normal;
+ font-weight: 700;
+}
+
+.form {
+ width: 100%;
+ max-width: 400px;
+ margin: 20px;
+}
+
+.input-field {
+ width: 95%;
+ height: 50px;
+ padding: 10px;
+ margin-bottom: 10px;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+}
+
+.sign-in-button,
+.sign-up-button {
+ width: 100%;
+ height: 60px;
+ padding: 10px;
+ margin-top: 20px;
+ border: none;
+ border-radius: 5px;
+ color: #fff;
+ background-color: #367aff;
+ cursor: pointer;
+ font-size: 20px;
+}
diff --git a/src/styles/agencysignup.css b/src/styles/agencysignup.css
new file mode 100644
index 0000000..50f4c21
--- /dev/null
+++ b/src/styles/agencysignup.css
@@ -0,0 +1,33 @@
+.agencysignup-container {
+ height: 100vh;
+ background-image: url("../assets/background.png");
+ background-size: cover;
+}
+.agencysignup-header {
+ padding: 40px;
+ color: white;
+}
+.agencysignup-header :first-child {
+ color: #fff;
+ font-family: Inter;
+ font-size: 25px;
+ font-style: normal;
+ font-weight: 800;
+ line-height: normal;
+ padding-bottom: 10px;
+}
+
+.signup-submit {
+ color: white;
+ border-radius: 20px;
+ border: none;
+ background: #5297ff;
+ height: 70px;
+ width: 250px;
+ font-weight: bold;
+ font-size: x-large;
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+ margin-top: 30px;
+}
diff --git a/src/styles/bookinfo.css b/src/styles/bookinfo.css
new file mode 100644
index 0000000..68b36a0
--- /dev/null
+++ b/src/styles/bookinfo.css
@@ -0,0 +1,65 @@
+.bookinfo-container {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ text-align: center;
+}
+
+.header-info {
+ width: 100%;
+ height: 100%;
+ text-align: center;
+ color: black;
+ font-size: 25px;
+ font-family: "Noto Sans KR";
+ font-weight: 700;
+ word-wrap: break-word;
+ padding: 20px;
+}
+
+.bookImg {
+ margin: auto;
+ width: 200px;
+ height: 280px;
+}
+
+.bookTitle {
+ width: 100%;
+ height: 100%;
+ text-align: left;
+ color: black;
+ font-size: 24px;
+ font-family: "Noto Sans KR";
+ font-weight: 900;
+ padding: 15px;
+ border-bottom: solid 1px;
+}
+
+.bookTable {
+ width: 400px;
+ font-size: 20px;
+}
+
+.bookTable td {
+ text-align: left;
+ font-weight: 800;
+ padding: 10px;
+}
+
+.bookTable td:nth-of-type(2) {
+ font-weight: 400;
+}
+
+.applyButton {
+ width: 300px;
+ height: 56px;
+ background: #5297ff;
+ border-radius: 20px;
+ border: none;
+ justify-content: center;
+ align-items: center;
+ color: white;
+ font-weight: 700;
+ font-size: 24px;
+ margin-top: 30px;
+}
diff --git a/src/styles/booklist.css b/src/styles/booklist.css
new file mode 100644
index 0000000..8da6be2
--- /dev/null
+++ b/src/styles/booklist.css
@@ -0,0 +1,29 @@
+.header-list {
+ width: 100%;
+ height: 100%;
+ text-align: center;
+ color: black;
+ font-size: 30px;
+ font-family: "Noto Sans KR";
+ font-weight: 700;
+ padding-top: 20px;
+ padding-bottom: 20px;
+}
+.select {
+ display: flex;
+ justify-content: center;
+}
+.select-curriculum,
+.select-subject {
+ padding: 5px;
+ font-weight: 900;
+ font-size: large;
+}
+
+.select-subject {
+ margin-left: 40px;
+}
+
+.booklist {
+ padding-top: 20px;
+}
diff --git a/src/styles/finish.css b/src/styles/finish.css
new file mode 100644
index 0000000..8bc1e2e
--- /dev/null
+++ b/src/styles/finish.css
@@ -0,0 +1,52 @@
+.finish-container {
+ background-image: url("../assets/background.png");
+ width: 100%;
+ height: 100vh;
+ background-size: cover;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+ color: white;
+}
+
+.header-finish {
+ width: 100%;
+ height: 100%;
+ text-align: center;
+ color: white;
+ font-size: 30px;
+ font-family: "Noto Sans KR";
+ font-weight: 900;
+ word-wrap: break-word;
+ margin-top: 100px;
+}
+
+.finish-subHeader {
+ width: 100%;
+ height: 100%;
+ text-align: center;
+ color: white;
+ font-size: 20px;
+ font-family: "Noto Sans KR";
+ font-weight: 500;
+ word-wrap: break-word;
+}
+
+.toListBtn {
+ color: black;
+ font-size: 16px;
+ font-family: "Noto Sans KR";
+ font-weight: 700;
+ width: 200px;
+ height: 50px;
+ border-radius: 5%;
+ border: none;
+ word-wrap: break-word;
+}
+
+.giftboxImg {
+ width: 400px;
+ height: auto;
+}
diff --git a/src/styles/inputfield.css b/src/styles/inputfield.css
new file mode 100644
index 0000000..1c53c37
--- /dev/null
+++ b/src/styles/inputfield.css
@@ -0,0 +1,32 @@
+.inputfield-container {
+ margin-left: 20px;
+ margin-top: 30px;
+}
+
+.textinputfield-container {
+ margin-left: 20px;
+ margin-top: 30px;
+}
+
+
+.input-label {
+ color: white;
+ font-family: Inter;
+ font-size: 15px;
+ font-style: normal;
+ font-weight: 600;
+ line-height: normal;
+ margin: 10px;
+}
+
+.signup-input {
+ width: 90%;
+ height: 30px;
+ border-radius: 20px;
+ border: none;
+ padding-left: 20px;
+}
+
+.signup-input::placeholder {
+ color: transparent;
+}