Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev #538

Merged
merged 4 commits into from
Feb 21, 2025
Merged

Dev #538

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 32 additions & 27 deletions static/js/CommunityPage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ const CommunityPage = ({multiPanel, toggleSignUpModal, initialWidth}) => {
} else {
featuredContent = <LoadingMessage />
}
console.log("load data from recentlyPUblished component")

return (
<div className="readerNavMenu communityPage sans-serif" key="0">
<div className="content">
Expand All @@ -75,24 +75,29 @@ CommunityPage.propTypes = {


const RecentlyPublished = ({multiPanel, toggleSignUpModal}) => {
const options = {};
const pageSize = 16;
const [nSheetsLoaded, setNSheetsLoded] = useState(0);
// const options = Sefaria.interfaceLang === "hebrew" ? {"lang": "hebrew"} : {};
const options = {};
// options["filtered"] = true;
const pageSize = 60;
const [nSheetsLoaded, setNSheetsLoded] = useState(0); // counting sheets loaded from the API, may be different than sheets displayed
// Start with recent sheets in the cache, if any
const [recentSheets, setRecentSheets] = useState(Sefaria.sheets.publicSheets(0, pageSize, options));
const [recentSheets, setRecentSheets] = useState(collapseSheets(Sefaria.sheets.publicSheets(0, pageSize, options)));

// But also make an API call immeditately to check for updates
useEffect(() => {
loadMore();
}, []);

const loadMore = (e, until=pageSize) => {
Sefaria.sheets.publicSheets(nSheetsLoaded, pageSize, options, true, (data) => {
const newSheets = recentSheets ? recentSheets.concat(data) : data;
console.log("Raw Sheets Data:", data);
const collapsedSheets = collapseSheets(data);
const newSheets = recentSheets ? recentSheets.concat(collapsedSheets) : collapsedSheets;
setRecentSheets(newSheets);
console.log("Sheets to be displayed:", newSheets);
console.log("sheets to be displayed", newSheets)
setNSheetsLoded(nSheetsLoaded + pageSize);
if (data.length < until && data.length !== 0) {
loadMore(null, until - data.length);
if (collapsedSheets.length < until && collapsedSheets.length !== 0) {
loadMore(null, until - collapsedSheets.length);
}
});
};
Expand Down Expand Up @@ -121,24 +126,24 @@ const RecentlyPublished = ({multiPanel, toggleSignUpModal}) => {
};


// const collapseSheets = (sheets) => {
// // Collapses consecutive sheets with the same author
// if (!sheets) { return null; }

// return sheets.reduce((accum, sheet) => {
// if (!accum.length) {
// return [sheet];
// }
// const prev = accum[accum.length-1];
// if (prev.author === sheet.author) {
// prev.moreSheets = prev.moreSheets || [];
// prev.moreSheets.push(sheet);
// } else {
// accum.push(sheet);
// }
// return accum;
// }, []);
// }
const collapseSheets = (sheets) => {
// Collapses consecutive sheets with the same author
if (!sheets) { return null; }

return sheets.reduce((accum, sheet) => {
if (!accum.length) {
return [sheet];
}
const prev = accum[accum.length-1];
if (prev.author === sheet.author) {
prev.moreSheets = prev.moreSheets || [];
prev.moreSheets.push(sheet);
} else {
accum.push(sheet);
}
return accum;
}, []);
}

const FeaturedSheet = ({sheet, showDate, trackClicks, toggleSignUpModal}) => {
if (!sheet) { return null; }
Expand Down
20 changes: 15 additions & 5 deletions static/js/sefaria/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -201,16 +201,26 @@ class Util {
}

static naturalTime(timeStamp, {lang, short} = {}) {
// given epoch time stamp, return string of time delta between `timeStamp` and now
const now = Util.epoch_time();
const duration = now - timeStamp; // Calculate duration in milliseconds
let language = lang ? lang : (Sefaria.interfaceLang === 'hebrew' ? 'he' : 'en');
let spacer = " ";
if (short) {
language = language === "en" ? "shortEn" : "shortBo";
spacer = language === "shortEn" ? "" : " ";
spacer = ""; // Apply empty spacer to both shortEn and shortBo
}
return Util.sefariaHumanizeDuration(now - timeStamp, {"language": language, "spacer": spacer});
let result = Util.sefariaHumanizeDuration(duration, {"language": language, "spacer": spacer});
if (language === "shortBo") {
const match = result.match(/^(\d+)(.*)/);
if (match) {
const number = match[1]; // Leading digits, e.g., "5"
const unit = match[2]; // Remainder, e.g., "ཆུ་ཚོད་"
result = unit + number; // Combine without space, e.g., "ཆུ་ཚོད་5"
}
}
return result;
}


static object_equals(a, b) {
// simple object equality assuming values are primitive. see here
Expand Down Expand Up @@ -1169,9 +1179,9 @@ Util.sefariaHumanizeDuration = humanizeDuration.humanizer({
ms: () => "ms",
},
shortBo: {
y: () => "ཕྱི་ལོ",
y: () => "ལོ་",
mo: () => "ཟླ་",
w: () => "བདུན་ཕྲག་",
w: () => "བདུན་",
d: () => "ཚེས་",
h: () => "ཆུ་ཚོད་",
m: () => "སྐར་མ་",
Expand Down