Skip to content

sunpl13/Calendar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

7 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“†Calendar App

๐Ÿ’ฌ์†Œ๊ฐœ

ย 

React์™€ SCSS๋ฅผ ์ด์šฉํ•œ ์บ˜๋ฆฐ๋” App

๋‹ฌ๋ ฅ

ย  ย  ย 

๐Ÿ“…์‹คํ–‰์˜ˆ์ œ

์‹คํ–‰์˜์ƒ

์บ˜๋ฆฐ๋” ์‹คํ–‰ ์˜์ƒ

์˜ค๋Š˜ ๋‚ ์งœ๋กœ ๋Œ์•„์˜ค๊ธฐ

์˜ค๋Š˜ ๋‚ ์งœ๋กœ ๋Œ์•„์˜ค๊ธฐ ๋ฒ„ํŠผ

๋‚ ์งœ ์ฐพ๊ธฐ

๋ถ€๊ฐ€๊ธฐ๋Šฅ-๋‚ ์งœ ์ฐพ๊ธฐ ย  ย  ย 

๐Ÿ“ฆํŒจํ‚ค์ง€

ย 

moment
node-sass

ย 

๐Ÿ“ํด๋”๊ตฌ์กฐ

ย 

โ”œโ”€CALENDAR
โ”‚  โ”‚  README.md
โ”‚  โ”‚  package.json
โ”‚  โ”œโ”€public
โ”‚  โ”‚  โ”‚ index.html
โ”‚  โ”‚  โ”‚ //์ดํ•˜ ์ค‘๋žต
โ”‚  โ”‚  โ”” manifest.json
โ”‚  โ””โ”€src
โ”‚     โ”œโ”€Calendar
โ”‚     โ”‚  โ”œโ”€Build.js
โ”‚     โ”‚  โ”œโ”€Calendar.js
โ”‚     โ”‚  โ”œโ”€CalendarBody.js
โ”‚     โ”‚  โ”” Header.js
โ”‚     โ”œโ”€Scss
โ”‚     โ”‚  โ”œโ”€App.scss
โ”‚     โ”‚  โ””calendar.scss
โ”‚     โ”œโ”€App.js
โ”‚     โ”” index.js

ย 

๐Ÿ“์„ค๋ช…

Build.js

moment ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐ›์•„์„œ ํ•œ ๋‹ฌ์— ํ•ด๋‹นํ•˜๋Š” ๋‚ ์งœ๋“ค์„ ์ƒ์„ฑํ•ด์„œ ์ผ์ฃผ์ผ ๋‹จ์œ„๋กœ ๋ฐฐ์—ด๋กœ ์ €์žฅํ•˜์—ฌ ์ด 6์ฃผ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ (๋‹ฌ๋ ฅ์˜ ๋ชธ์ฒด)

export default function Build(value) {
  const startDay = value.clone().startOf("month").startOf("week"); //๋งค์›” 1์ผ ์ฃผ์˜ ์‹œ์ž‘์ผ
  const endDay = value.clone().endOf("month").endOf("week"); //ํ•œ ๋‹ฌ ๋งˆ์ง€๋ง‰์ฃผ์˜ ๋งˆ์ง€๋ง ๋‚ 

  const day = startDay.clone().subtract(1, "day");
  const calendar = [];
  const nextWeek = [];

  //์‹œ์ž‘์ผ๋ถ€ํ„ฐ ๋์ผ๊นŒ์ง€ ๋ฐฐ์—ด์— ๋‹ด๊ธฐ
  while (day.isBefore(endDay, "day")) {
    calendar.push(
      Array(7)
        .fill(0)
        .map(() => day.add(1, "day").clone())
    );
  }

  //6์ฃผ๋กœ ๋งž์ถ”๊ธฐ
  if (calendar.length < 6) {
    for (let i = 0; i < 7; i++) {
      nextWeek[i] = endDay.clone().add(i + 1, "days");
    }

    calendar.push(nextWeek);
  }
  return calendar;
}

Calendar.js

ํ—ค๋”์™€ ๋ชธ์ฒด๋ฅผ ํฌํ•จํ•œ ๋‹ฌ๋ ฅ ์ „์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ์—ฌ๊ธฐ์„œ moment ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ state๋กœ ์ €์žฅํ•˜์—ฌ ๊ฐ ์ปดํฌ๋„ŒํŠธ์— props๋กœ ๋ฟŒ๋ ค์ค€๋‹ค.

function Calendar() {
  const [state, setstate] = useState(moment());

  return (
    <div className="Calendar">
      <div className="cal_header">
        <Header value={state} setvalue={setstate} moment={moment} />
      </div>
      <div className="cal_body">
        <CalendarBody value={state} setvalue={setstate} moment={moment} />
      </div>
    </div>
  );
}

Header.js

๋‹ฌ๋ ฅ์˜ ๊ธฐ๋Šฅ๋“ค์ด ๋Œ€๋ถ€๋ถ„ ์‹คํ–‰๋˜๋Š” ์ปดํฌ๋„ŒํŠธ.

๋‹ฌ ๊ฐ„ ์ด๋™, ์˜ค๋Š˜๋กœ ๋Œ์•„์˜ค๋Š” ๊ธฐ๋Šฅ, ๋‚ ์งœ ์ฐพ๊ธฐ ๊ธฐ๋Šฅ ๋“ฑ์ด ์—ฌ๊ธฐ์„œ ์‹คํ–‰๋œ๋‹ค.

props๋กœ ๋„˜๊ฒจ๋ฐ›์€ ๋ชจ๋จผํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ์–ดํ•œ๋‹ค

ํ—ค๋”

CalendarBody.js

๋‹ฌ๋ ฅ์˜ ๋ชธ์ฒด ์ปดํฌ๋„ŒํŠธ๋กœ์„œ Build.js ์—์„œ ๋ฆฌํ„ด๋œ ๋ฐฐ์—ด์„ ๊ฐ€์ง€๊ณ  ๋ชธ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

mapํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐฐ์—ด์„ ํ•˜๋ฃจ ๋‹จ์œ„๋กœ ๋ฐ”๊พธ๊ธฐ

๋ชธ์ฒด



๐Ÿ˜Š์ž˜ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ ์ 

1. Scss์˜ ์ž์ฃผ ์“ฐ์ด๋Š” ํšจ๊ณผ๋“ค์„ ์ง€์ •ํ•œ ๊ฒƒ!

์ž์ฃผ ์“ฐ์ผ๋งŒํ•œ ํšจ๊ณผ๋“ค์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋†“๊ณ  import ํ•ด์„œ ์‚ฌ์šฉ

//์ƒ‰์ƒ ํƒ€์ž… ์ง€์ •
$SkyBlue: #2e8fe4;
$LightSky: #63aff1;
$SkyBlue-: #5fc3e4;
$Sky: #b3edfa;
$Sky-: #9de5f5;
$WhiteGray: #e3e3e3;
$Gray: #c2c2c2;
$DarkGray: #999999;

//๋‹ฌ๋ ฅ ๋‚ ์งœ๋ชจ์–‘ ๋ชจ์–‘ ์ง€์ •
@mixin border($border-weight, $border-color) {
  width: 50px;
  height: 50px;
  padding: 1px;
  border: $border-weight solid $border-color;
  border-radius: 5px;
  cursor: pointer;
}

//๋ฒ„ํŠผ ๋ชจ์–‘ ์ง€์ •
@mixin button($color) {
  border: 1px solid $color;
  background-color: white;
  color: $color;
  padding: 5px;
}

//hover์‹œ ์›€์ง์ž„
@mixin hover {
  transform: translate(1px, 1px);
}

2. ํด๋ž˜์Šค๋ช… ์ง€์ • ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ

css์— ์ค‘๋ณต๋˜๋Š” ํด๋ž˜์Šค๋“ค์„ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด return์‹œ์ผœ์„œ ํšจ๊ณผ๋ฅผ ์ž…ํžŒ ๊ฒƒ.

//ํด๋ž˜์Šค๋ช… ์ง€์ •์„ ์œ„ํ•œ ํ•จ์ˆ˜ (ํ† ,์ผ ์ƒ‰์น ํ•˜๊ธฐ)
const name = (idx) => {
  if (idx === 0) {
    return " sun";
  } else if (idx === 6) {
    return " sat";
  } else {
    return "";
  }
};

//์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ์ฐพ๋Š”๋‹ค๋ฉด ๋‚ ์งœ์— ๋ฐฐ๊ฒฝ์ƒ‰์„ ์ƒ‰์น ํ•˜๋Š” ํ•จ์ˆ˜
const findToday = (day) => {
  if (day === moment().format("YYYYMMDD")) {
    return " today";
  } else {
    return "";
  }
};

์ด๋ ‡๊ฒŒ className ๊ตฌํ•  ๋•Œ ์‚ฌ์šฉ


<div
  key={idx}
  className="selected"
  onClick={() => {
    setvalue(item);
  }}
>
  <div className={"day" + name(idx) + findToday(item.format("YYYYMMDD"))}>
    <span>{item.format("D").toString()}</span>
  </div>
</div>

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published