api.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import Butter from "buttercms";
  2. let butter;
  3. const previewSetting = process.env.PREVIEW;
  4. // make preview mode by default
  5. const preview =
  6. previewSetting === "true" || previewSetting === undefined ? 1 : 0;
  7. try {
  8. butter = Butter(process.env.NEXT_PUBLIC_BUTTER_CMS_API_KEY, preview);
  9. } catch (e) {
  10. console.log(e);
  11. }
  12. const defaultPageSize = 100;
  13. const defaultPostCount = 10;
  14. export async function getLandingPage(slug) {
  15. try {
  16. const page = await butter.page.retrieve("landing-page", slug);
  17. return page?.data?.data;
  18. } catch (e) {
  19. throw e.response.data.detail;
  20. }
  21. }
  22. export async function getLandingPages() {
  23. let paginatedLandingPages = [];
  24. let currentPage = 1;
  25. while (!!currentPage) {
  26. const landingPagesData = await getLandingPagesData(currentPage);
  27. paginatedLandingPages.push(...landingPagesData.pages);
  28. currentPage = landingPagesData.nextPage;
  29. }
  30. return paginatedLandingPages;
  31. }
  32. async function getLandingPagesData(page, pageSize = defaultPageSize) {
  33. try {
  34. const params = {
  35. page,
  36. page_size: pageSize,
  37. };
  38. const response = await butter.page.list("landing-page", params);
  39. return {
  40. pages: response?.data?.data,
  41. prevPage: response?.data?.meta.previous_page,
  42. nextPage: response?.data?.meta.next_page,
  43. };
  44. } catch (e) {
  45. throw e.response.data.detail;
  46. }
  47. }
  48. export async function getPostsData(
  49. { page, pageSize, tag, category } = { page: 1, pageSize: defaultPostCount }
  50. ) {
  51. try {
  52. // https://buttercms.com/docs/api/node?javascript#get-your-blog-posts
  53. const params = {
  54. page_size: pageSize || defaultPostCount,
  55. page: page || 1,
  56. };
  57. if (tag) {
  58. params.tag_slug = tag;
  59. }
  60. if (category) {
  61. params.category_slug = category;
  62. }
  63. const response = await butter.post.list(params);
  64. return {
  65. posts: response?.data?.data,
  66. prevPage: response?.data?.meta.previous_page,
  67. nextPage: response?.data?.meta.next_page,
  68. };
  69. } catch (e) {
  70. throw e.response.data.detail;
  71. }
  72. }
  73. export async function getPost(slug) {
  74. try {
  75. const response = await butter.post.retrieve(slug);
  76. return response?.data?.data;
  77. } catch (e) {
  78. throw e.response.data.detail;
  79. }
  80. }
  81. export async function getMainMenu() {
  82. try {
  83. const mainMenu = {
  84. meta: {
  85. id: 740357,
  86. },
  87. name: "Main menu",
  88. menu_items: [
  89. {
  90. meta: {
  91. id: 740351,
  92. },
  93. label: "222",
  94. url: "#home",
  95. },
  96. {
  97. meta: {
  98. id: 740352,
  99. },
  100. label: "About",
  101. url: "#about",
  102. },
  103. {
  104. meta: {
  105. id: 740353,
  106. },
  107. label: "Features",
  108. url: "#features",
  109. },
  110. {
  111. meta: {
  112. id: 740354,
  113. },
  114. label: "Try It",
  115. url: "#tryit",
  116. },
  117. {
  118. meta: {
  119. id: 740355,
  120. },
  121. label: "Testimonials",
  122. url: "#testimonials",
  123. },
  124. {
  125. meta: {
  126. id: 740356,
  127. },
  128. label: "Blog",
  129. url: "#blog",
  130. },
  131. ],
  132. };
  133. return mainMenu ? mainMenu.menu_items : [];
  134. } catch (e) {
  135. throw e.response.data.detail;
  136. }
  137. }
  138. export async function getCategories() {
  139. try {
  140. const response = await butter.category.list();
  141. return response?.data?.data;
  142. } catch (e) {
  143. throw e.response.data.detail;
  144. }
  145. }
  146. export async function getTags() {
  147. try {
  148. const response = await butter.tag.list();
  149. return response?.data?.data;
  150. } catch (e) {
  151. throw e.response.data.detail;
  152. }
  153. }
  154. export async function searchPosts({ query }) {
  155. try {
  156. const response = await butter.post.search(query);
  157. return response?.data?.data;
  158. } catch (e) {
  159. throw e.response.data.detail;
  160. }
  161. }